2

假设我有这个域实体:

public class Foo
{
    public string Name { get; set; }
    public IEnumerable<Bar> Bars { get; set; }
}

现在假设我需要将Bars属性绑定到 WPF/MVVM 应用程序中的数据网格。通知视图Bars属性更改的适当方法是什么?我看到几个选项:

  1. 将 Bars 更改为 ObservableCollection
  2. 在视图模型上创建一个新属性,即 ObservableCollection,它是真实 Bars 的副本。
  3. 刷新整个视图
  4. 别的/更好的?

我可以做#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; }
    }
4

1 回答 1

4

In a best practice kind-of-way, your view should not directly bind to your model: that's what your view model is for. Ideally, you want #2 for maximum separation and a logic to synchronize the change back to the model when it's appropriate.

于 2013-07-22T12:51:41.767 回答