我是WPF和MVVM的新手,我開始使用"Jason Dolinger on Model-View-ViewModel"文章和示例,但我對數據綁定有一些疑問。使用ObservableCollection數據綁定從線程更新datagrid
1)在他的演示應用程序中,他爲ObservableCollection Items的DependencyObject繼承了子類。與INotifyPropertyChanged相比有什麼優點/缺點?
2)在datagrid/listview中更新模型視圖的最佳方法是什麼?在他的榜樣,他註冊爲當引用對象添加或更新的監聽器:
_source.QuoteArrived += new Action<Quote>(_source_QuoteArrived);
比視圖模型創建並添加QuoteViewModel對象的集合或通過在方便的設置更新的報價對象更新視圖QuoteViewModel對象使用名爲_quoteMap的字典。
void _source_QuoteArrived(Quote quote)
{
QuoteViewModel qvm;
if (_quoteMap.TryGetValue(quote.Symbol, out qvm))
{
qvm.Quote = quote;
}
else
{
qvm = new QuoteViewModel();
qvm.Quote = quote;
this.Quotes.Add(qvm);
_quoteMap.Add(quote.Symbol, qvm);
}
}
是否有更好的方法來更新從模型視圖時報價對象已更新或我不得不創建一個dictionnary?如果在更新Quote對象時可以立即更新列表視圖,而不需要引用INotifyPropertyChanged或DependencyObject的子類,那將更容易。
感謝
的內部也許我可以創造我MainWindowViewModel事件,當報價更新觸發此事件。我可以在我的MainWindow中監聽該事件並調用dataGrid1.Items.Refresh();這是個好主意嗎 ? – DnBase 2012-04-23 11:41:03
但是,每次更新一個項目時都會刷新整個網格不會丟失任何已編輯的內容嗎? (從未使用網格) – GazTheDestroyer 2012-04-23 12:36:36