BlazorBindings.Maui μ†Œκ°œ

μž¬λ―Έλ‚œ μ‹€ν—˜μ„ ν•˜κ³  μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό μ†Œκ°œ ν•©λ‹ˆλ‹€.

MAUI 화면을 razor ꡬ문 μŠ€νƒ€μΌλ‘œ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 직접 μ‹€ν–‰ν•΄λ³΄μ§€λŠ” μ•Šμ•˜μ§€λ§Œ κ΄€λ ¨ λ¬Έμ„œλ„ μ œκ³΅ν•˜κ³  개인적으둜 razor ꡬ문 μŠ€νƒ€μΌμ„ 더 μ’‹μ•„ν•΄μ„œ κ°’ 변화에 λ”°λ₯Έ ν™”λ©΄ λ Œλ”λ§μ΄ XAML μŠ€νƒ€μΌμ— λΉ„ν•΄ λ‚˜μ˜μ§€ μ•Šλ‹€λ©΄ μ‚΄νŽ΄λ³Ό ν•„μš”κ°€ μžˆλŠ” ν”„λ‘œμ νŠΈ 인 것 κ°™μŠ΅λ‹ˆλ‹€.

4개의 μ’‹μ•„μš”

이 ν”„λ‘œμ νŠΈλŠ” Microsoft의 μ•„λž˜μ˜ μ‹€ν—˜μš© λͺ¨λ°”일 Blazor λ°”μΈλ”©μ˜ ν¬ν¬μž…λ‹ˆλ‹€.

1개의 μ’‹μ•„μš”

λ¬Έμ„œλ₯Ό μ΄μš©ν•΄ ν”„λ‘œμ νŠΈ ν…œν”Œλ¦Ώμ„ μ„€μΉ˜ν•œ ν›„ κΈ°λ³Έ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•΄μ„œ μ‹€ν–‰ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

razor둜 νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•˜λŠ” 것을 확인할 수 있고

image

image

λ‹€μŒμ²˜λŸΌ 잘 싀행이 λ©λ‹ˆλ‹€.

image

razor의 μž₯점은 xamlλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ λΆˆν•„μš”ν•˜κ²Œ ν™”λ©΄ κ΄€λ ¨ μ½”λ“œλ₯Ό μ§€μ–‘ν•˜κ²Œ λ˜λŠ” λ°©ν–₯μ„±μ—μ„œ
razorλ₯Ό μ‚¬μš©ν•˜λ©΄ μžμ—°μŠ€λŸ½κ²Œ ν™”λ©΄ ꡬ성과 ν™”λ©΄ κ΄€λ ¨ μ½”λ“œλ₯Ό κ²°ν•©ν•  수 있게 λ©λ‹ˆλ‹€.

그리고 λ°”μΈλ”©μ˜ λ™μž‘μ΄ μ’€ 더 직관적이죠.

StateHasChanged()λ₯Ό κ·ΈλŒ€λ‘œ μ“Έ 수 μžˆλŠ” κ²ƒμœΌλ‘œ 보아 λ Œλ”λ§ νŠΈλ¦¬λ„ Blazor의 그것과 같이 λ™μΌν•˜κ²Œ κ΅¬μ„±ν•˜μ—¬ λ™μž‘ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

2개의 μ’‹μ•„μš”

λͺ‡κ°€μ§€ λ™μž‘μ„ ν™•μΈν–ˆλŠ”λ° κΈ°λ³Έ ν…œν”Œλ¦Ώ κΈ°λ°˜μœΌλ‘œλŠ” 잘 λ™μž‘μ„ ν•˜λ„€μš”.

@page "/main"

<ContentPage>
    <ScrollView>
        <VerticalStackLayout Spacing="25"
                             Padding="new(30,0)"
                             VerticalOptions="LayoutOptions.Center">

            @if (count % 2 is 0)
            {
                <Image Source="dotNetBotSource"
                   HeightRequest="200"
                   HorizontalOptions="LayoutOptions.Center" Opacity="opacity" />
            }

            <Label Text="Hello, World!"
                   FontSize="32"
                   HorizontalOptions="LayoutOptions.Center" />

            <Label Text="Welcome to .NET Multi-platform App UI"
                   FontSize="18"
                   HorizontalOptions="LayoutOptions.Center" />

            <Button Text="@ButtonText"
                    HorizontalOptions="LayoutOptions.Center"
                    OnClick="OnCounterClicked" />

            <Label HorizontalOptions="LayoutOptions.Center">== "@ButtonText" == </Label>

            <Entry HorizontalOptions="LayoutOptions.Center" @bind-Text="inputText" />

            <Label HorizontalOptions="LayoutOptions.Center">== "@inputText" == </Label>
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>

@code {
    ImageSource dotNetBotSource = ImageSource.FromFile("dotnet_bot.png");

    int count = 0;
    double opacity = 1.0d;
    string inputText = "default text";

    string ButtonText => count switch
    {
        0 => "Click me",
        1 => $"Clicked 1 time",
        _ => $"Clicked {count} times"
    };

    void OnCounterClicked()
    {
        count++;

        opacity -= 0.1;
    }
}

image

2개의 μ’‹μ•„μš”

저도 쑰금 μ‚΄νŽ΄ λ΄€λŠ”λ° html에 μ΅μˆ™ν•˜μ§€ μ•ŠμœΌμ‹  뢄듀은
blazor hybrid 보닀 mobile blazor binding이 λ‚˜μ„ 것 κ°™μŠ΅λ‹ˆλ‹€.~~

3개의 μ’‹μ•„μš”

λ‹€λ₯Έκ±΄ 큰 ν—ˆλ“€μ΄ μ—†λŠ”λ° Attached Property(μ—°κ²°λœ 속성)κ°€ λ¬Έμ œμž…λ‹ˆλ‹€. Blazor와 Razorμ—λŠ” Attached Propertyκ°€ μ—†κ±°λ“ μš”. κ·Έλž˜μ„œ 이 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλŠ” Attached Propertyλ₯Ό Blazor의 λ§€κ°œλ³€μˆ˜λ₯Ό ν•„μš”ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ (Grid와 Grid μžμ‹ λ“±)μ—μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. (즉, μ‚¬μš©μž ν™•μž₯은 μ•ˆλ©λ‹ˆλ‹€β€¦ κ·Έλ ‡μ£ ?)

쑰금 더 μ‚΄νŽ΄λ΄€λ”λ‹ˆ 이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” Blazor λ Œλ”λ§ μ‹œμŠ€ν…œμ„ κ·Έλƒ₯ μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€λ§Œ, λ Œλ”λ§μ— μ‚¬μš©ν•œλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό MAUIλ₯Ό μ‚¬μš©ν•˜λŠ” 것이죠. κ·ΈλŸ¬λ‹ˆκΉŒ λ³€ν™”λ₯Ό κ°μ§€ν•΄μ„œ λ Œλ” 트리λ₯Ό κ°±μ‹ ν•˜λŠ” κΈ°μ‘΄ Blazor λ Œλ”λ§ μ‹œμŠ€ν…œμ€ κ·ΈλŒ€λ‘œ μ‚¬μš©μ΄ λ©λ‹ˆλ‹€. λ§€λ ₯μ μ΄κ΅°μš” +_+ λ˜‘κ°™μ€ κ°œλ…μœΌλ‘œ MAUI 뿐만 μ•„λ‹ˆλΌ Avaloniaλ‚˜ Uno도 Razor ꡬ문 μŠ€νƒ€μΌλ‘œ ν™•μž₯ν•  수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. (λ‹€λ§Œ, 이런 μ‹€ν—˜ ν”„λ‘œμ νŠΈκ°€ μ„±κ³΅ν•˜λ €λ©΄ razor μŠ€νƒ€μΌ μ†ŒλΉ„μžκ°€ λ§Žμ•„μ•Ό ν•œλ‹€λŠ” 것이 λ¬Έμ œκ΅°μš”)

3개의 μ’‹μ•„μš”