Я новичок в MVVM и имею небольшую проблему. У меня есть два пользовательских элемента управления: родительский и дочерний (с view, viewmodel, модель классов). И нужно передать некоторые свойства от родителя к ребенку. Пока я справился с этим, написав такой код:
public static readonly DependencyProperty CallbackActionProperty =
DependencyProperty.Register("CallbackAction", typeof (Action),
typeof (ChildView), new PropertyMetadata(default(Action)));
public Action CallbackAction
{
get { return (Action) GetValue(CallbackActionProperty); }
set
{
SetValue(CallbackActionProperty, value);
((ChildViewModel)this.DataContext).CallbackAction = value; // Change ViewModel property too
}
}
Это свойство зависимости в ChildView
, и для его набора я также установил свойство ViewModel
. После этого я получаю доступ к этому свойству зависимости из ParentView
и устанавливаю CallbackAction
->, который устанавливает CallbackAction
в дочерней ViewModel.
Код:
this.Loaded += (sender, args) => childUc.CallbackAction = ((ParentViewModel) this.DataContext).RefreshStatuses;
childUc
- это пользовательский контроль, расположенный на родительском элементе и представленный ChildView
.
Код ужасен, поэтому я надеюсь увидеть лучшую практику с точки зрения того, чтобы не нарушать шаблон.
Спасибо.