我创建了一个自定义控件,通过使用mvvm light双向绑定来更新我的模型。
<cbtn:BillCounter Value="{Binding MoneyTypes[0].Paid, Mode=TwoWay }" />
MoneyTypes是一个包含其中几个的数组。我看到当我检查那个数组我的更改已经通过模型中的数组时,值会更新。但是,我需要根据发生的变化重新计算其他值。是否有任何方式可以通过我上面使用的那种绑定通知我的模型发生了变化?
这是此问题的延续:Binding to an array of structs in WPF,但现在我需要让模型对自定义控件所做的更改做出反应。
谢谢!
答案 0 :(得分:2)
无论属性是由第三属性更新的,模型只需要调用PropertyChanged。因此,对于每个属性,他们首先会更新其属性PropertyChanged("PropertyName")
,然后他们会更新依赖于此属性的其他属性PropertyChanged("SomeOtherProperty");
基本上,您只需要调用一系列属性更改事件来冒泡它备份到UI以查看新计算。
答案 1 :(得分:1)
假设您的MoneyType
类正在实施INotifyPropertyChanged
,您可以在ViewModel
中收听更改事件,并在发生时{...}}通知:
这是Model
,它将订阅所有ViewModel
更改。每当发生更改时,只需调用MoneyType
上的方法重新计算
Model
在模型
中公开所需的方法public class MyViewModel
{
private IMyModel _myModel;
public MyViewModel(MyModel myModel)
{
_myModel = myModel;
foreach (var moneyType in MoneyType)
{
moneyType.OnPropertyChanged += MoneyTypePropetyChanged;
}
}
private void OnMoneyTypePropetyChanged(object sender, PropertyChangedEventArgs e)
{
_myModel.NotifyMoneyTypeChanged();
}
}