Back to top

MVVM을 사용하는 User Control에 parameter 바인딩하기

작성날짜 2024/12/03


public string Sex
{
    get => (string)GetValue(SexProperty);
    set => SetValue(SexProperty, value);
}

public static readonly DependencyProperty SexProperty =
    DependencyProperty.Register(
        nameof(Sex), typeof(string), typeof(MyComponent),
        new FrameworkPropertyMetadata(
            null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

<PropertyName>Property와 같은 형식으로 User control에서 DependencyProperty를 정의하면 된다.

그리고 User Control은 ViewModel을 가지면 안 된다.

아래와 같이 자기자신(User Control)을 바인딩해야 한다.

<UserControl x:Class="MyNamspace.MyComponent" ...>
    <Grid>
        <TextBox
            Text="{Binding Sex,
                   RelativeSource={RelativeSource AncestorType=UserControl}}"/>
    </Grid>
</UserControl>


User Control을 사용하는 쪽에서 Property에 데이터를 바인딩할 수 있게 된다.

<components:MyComponent Sex="{Binding SexInViewModel}"/>


https://stackoverflow.com/questions/63604988/how-to-pass-a-usercontrol-parameter-to-the-viewmodel-using-mvvm




값 변경 시에 콜백 함수 호출


FrameworkPropertyMetadata 내부에 PropertyChangedCallback()를 등록하면 된다.


public static readonly DependencyProperty SexProperty =
    DependencyProperty.Register(
        nameof(Sex), typeof(string), typeof(MyComponent),
        new FrameworkPropertyMetadata(
            null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault), new PropertyChangedCallback(OnSexChanged));


private static viod OnSexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

{

    // 함수 본문 정의

}

위와 같이 작성하면 Sex 값이 변경 될 때 마다 OnSexChanged 함수가 호출된ㄷ


An unhandled error has occurred. Reload 🗙