假设我有这个域实体:
public class Foo
{
public string Name { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
现在假设我需要将Bars
属性绑定到 WPF/MVVM 应用程序中的数据网格。通知视图Bars
属性更改的适当方法是什么?我看到几个选项:
- 将 Bars 更改为 ObservableCollection
- 在视图模型上创建一个新属性,即 ObservableCollection,它是真实 Bars 的副本。
- 刷新整个视图
- 别的/更好的?
我可以做#1,但我不喜欢视图需要导致域实体发生变化。
2 号看起来不错,但有点 hackish。
3 号似乎效率低下。
最好的方法是什么?
编辑
为了完整起见,根据西蒙的回答,我这样做了:
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; }
}