【发布时间】:2018-06-03 12:25:30
【问题描述】:
根据MSDN上的图片
似乎所有数据和业务逻辑都应该在模型内部,其中视图模型应该具有模型的一组重复属性以用于显示目的。并且 View 应该绑定到 ViewModel 内的重复属性,而不是直接绑定到 Models 内的属性。
ViewModel 应该实现INotifyPropertyChanged 接口来让 View 知道某些属性是否被更改。
但是 Model 应该如何通知 ViewModel 有关更改?它也应该实现INotifyPropertyChanged 吗?如果是这样,那么我们可以让 View 直接绑定到 Model 的属性。中间有一个额外的层的真正好处是什么,我们必须手动处理所有数据更改通知?
基于我的理解的示例:
查看:
<Grid>
<TextBlock Text="{Binding foo}"/>
<Label Content="{Binding bar}"/>
</Grid>
查看模型:
class ViewModel : INotifyPropertyChanged
{
Model _m;
public ViewModel(Model m)
{
_m = m;
}
public string foo
{
get
{
return _m.foo;
}
set
{
_m.UpdateFoo(value);
//This one works fine. xaml will call getter to get the dead beef version
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("foo"));
}
}
public string bar
{
get
{
return _m.bar;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
型号:
class Model
{
public string foo { get; private set; }
public string bar { get; private set; }
public void UpdateFoo(string newVal)
{
foo = newVal + "dead beef";
bar = newVal; //how do i tell ViewModel that i have changed?
}
}
【问题讨论】:
-
太好了,投反对票的人能解释一下为什么投反对票吗?