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}"/>
값 변경 시에 콜백 함수 호출
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 함수가 호출된ㄷ