我刚接触WPF和MVVM,开始看了Jason Dolinger的Model-View-ViewModel文章和示例,但我对数据绑定有一些疑问。
1)在他的演示应用程序中,他为ObservableCollection项目子类化DependencyObject。与INotifyPropertyChanged相比,这样做有什么利弊?
2)如何在datagrid/listview中从模型更新视图是最好的方法?在他的示例中,当添加或更新Quote对象时,他会注册为侦听器:
_source.QuoteArrived += new Action<Quote>(_source_QuoteArrived);
然后ViewModel创建并添加QuoteViewModel对象到集合中,或者使用名为_quoteMap的字典将更新后的Quote对象设置在方便的QuoteViewModel对象中来更新视图。
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);
}
}
有没有更好的方法可以在数据模型更新Quote对象时更新视图,或者我必须创建一个字典?如果列表视图可以在更新Quote对象时立即更新,那就太容易了...而不需要让Quote子类化INotifyPropertyChanged或DependencyObject。
谢谢