说我有这个域名实体:
public class Foo
{
public string Name { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
现在假设我需要将Bars
属性绑定到WPF / MVVM应用程序中的数据网格。通知视图Bars
属性发生了变化的适当方法是什么?我看到了几个选项:
我可以做#1,但我不喜欢视图的需要导致域实体发生变化。
2号似乎没问题,但有点ha ..
3号似乎效率低下。
最好的方法是什么?
修改
为了完整起见,根据Simon的回答,我这样做了:
public Foo SelectedFoo
{
get { return _selectedFoo; }
set
{
_selectedFoo = value;
this.NotifyPropertyChanged(() => this.Foo);
_bars = new ObservableCollection<Bar>();
if (_selectedFoo.Bars != null) { _bars.AddRange(_selectedFoo.Bars); }
this.NotifyPropertyChanged(() => this.Bars);
}
}
private ObservableCollection<Bar> _bars;
public ObservableCollection<Bar> Bars
{
get { return _bars; }
}
答案 0 :(得分:4)
在最佳实践中,您的视图不应直接绑定到您的模型:这就是您的视图模型的用途。理想情况下,您希望#2获得最大分离,并在需要时使用逻辑将更改同步回模型。