У меня есть UserControl MyView, у которого есть внутренний SubView UserControl.Неправильная практика определения ViewModel как DependencyProperty для привязки данных?
Модели представления 2 UserControls имеют одинаковую иерархическую структуру с представлениями, i, e, MyViewModel имеет SubViewModel внутри, как показано в приведенном ниже коде.
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.
Теперь я определяю SubViewModel в коде SubView и привязываю его к свойству SubViewModel класса MyViewModel.
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' реализует' INotifyPropertyChanged', так что MyViewModel может знать изменения свойств SubViewModel. – user4134476
Да, почему бы и нет? Имейте событие, подобное 'SubViewModelChanged' в' SubViewModel', и всякий раз, когда вы хотите уведомить об изменении свойства, поднимите это событие. В «MyViewModel» просто подпишитесь на это событие и действуйте соответствующим образом. – bit