내부 UserControl SubView가있는 UserControl MyView가 있습니다.ViewModel을 데이터 바인딩을위한 DependencyProperty로 정의하는 것은 나쁜 습관입니까?
두 개의 UserControls의 뷰 모델은 아래 코드와 같이 내부에 i, e, MyViewModel의 뷰와 동일한 계층 구조를 가지고 있습니다.
public class MyViewModel
{
private readonly SubViewModel _subViewModel = new SubViewModel();
public SubViewModel SubViewModel { get { return _subViewModel; } }
private void HandleSubViewModel()
{
// Do what is necessary to handle SubViewModel
}
}
제 질문은 SubViewModel을 SubView에 바인딩하는 방법입니다.
이제 SubView의 코드 숨김에 SubViewModel을 정의하고이를 MyViewModel 클래스의 SubViewModel 속성에 바인딩합니다.
public partial class SubView : UserControl
{
public static readonly DependencyProperty SubViewModelProperty = DependencyProperty.Register(
"SubViewModel", typeof (SubViewModel), typeof (SubView), new PropertyMetadata(default(SubViewModel)));
public SubViewModel SubViewModel
{
get { return (SubViewModel) GetValue(SubViewModelProperty); }
set { SetValue(SubViewModelProperty, value); }
}
}
<UserControl x:Class="MyProject.View.MyView"
xmlns:parts="clr-namespace:MyProject.View.Parts">
<Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=MyViewModel}">
<parts:SubView SubViewModel="{Binding SubViewModel}"/>
</Grid>
</UserControl>
이런 식으로 내부 뷰 모델을 바인딩하는 것은 나쁜 습관입니까?
그렇다면 더 나은 방법으로 어떻게 바인딩 할 수 있습니까?
감사하지만 추가 정보를 원하시면 다음 링크를 읽습니까 너를 대단히 너 r 신속한 답변. – user4134476
신속한 답변을 주셔서 대단히 감사합니다. 실제 코드에서'SubViewModel'은'MyViewModel'이'SubViewModel' 속성의 변화를 알 수 있도록'INotifyPropertyChanged'를 구현합니다. – user4134476
예, 왜 안 되니? 'SubViewModel'에서'SubViewModelChanged'와 같은 이벤트를 가지고 있고 속성 변경을 알릴 때마다이 이벤트를 발생 시키십시오. 'MyViewModel'에서이 이벤트에 간단하게 가입하고 그에 따라 행동하십시오. – bit