2
說我有這個域實體:綁定IEnumerable的MVVM屬性的正確方法,是不是可觀察集合
public class Foo
{
public string Name { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
現在,讓我們說,我需要將Bars
屬性綁定到一個WPF/MVVM應用一個DataGrid 。通知視圖Bars
屬性更改的適當方式是什麼?我看到幾個選項:
- 變更條是一個ObservableCollection
- 創建一個新的屬性,在視圖模型,這是一個ObservableCollection那纔是真正的酒吧的副本。
- 刷新整個視圖
- 其他/更好?
我可以做#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; }
}
如果您知道它何時發生變化,請在此處提出PropertyChanged(「酒吧」)。如果不是,n.2是正確的選項。 –
我發佈這個問題之前實際上已經嘗試過了,但沒有奏效。也許我還有其他的錯誤... –
我實際上爲'Foo'和'Bar'創建了一個單獨的視圖模型,並使用這些視圖模型... –