gpt4 book ai didi

wpf - 使用 ObservableCollection 数据绑定(bind)从线程更新数据网格

转载 作者:行者123 更新时间:2023-12-04 18:31:34 25 4
gpt4 key购买 nike

我是 WPF 和 MVVM 的新手,我从 "Jason Dolinger on Model-View-ViewModel" 开始文章和示例,但我对数据绑定(bind)有一些疑问。

1) 在他的演示应用程序中,他将 ObservableCollection 项的 DependencyObject 子类化。与 INotifyPropertyChanged 相比有哪些优点/缺点?

2)从数据网格/ ListView 中的模型更新 View 的最佳方法是什么?在他的示例中,当添加或更新 Quote 对象时,他注册为监听器:

_source.QuoteArrived += new Action<Quote>(_source_QuoteArrived);

然后 ViewModel 创建 QuoteViewModel 对象并将其添加到集合中,或者通过使用名为 _quoteMap 的字典在方便的 QuoteViewModel 对象中设置更新的 Quote 对象来更新 View 。
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 对象已更新或我被迫创建字典时,是否有更好的方法来更新模型中的 View ?如果可以在更新 Quote 对象时立即更新 ListView ,那就更容易了……而无需将 Quote 子类化为 INotifyPropertyChanged 或 DependencyObject。

谢谢

最佳答案

对于您的第一个问题,请参阅 this StackOverflow question .通常人们似乎更喜欢 INotifyPropertyChanged .

至于您的第二个问题,鉴于报价可以随时到达,您需要某种方法将到达的报价映射到您收藏中已有的报价。使用字典似乎是一种明智的做法。你还有什么建议?

您说 ListView 立即更新会很好,但是 ListView 怎么知道新的 Quote 对应的对象是什么? ListView 纯粹监视实现 INotifyCollectionChanged 的集合,它对 Quote 的内部结构一无所知, 或 Quote.Symbol

关于wpf - 使用 ObservableCollection 数据绑定(bind)从线程更新数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com