【发布时间】:2015-08-13 18:37:39
【问题描述】:
我的解决方案包含两个项目。第一个项目连接到外部服务器并使用数据更新自己的结构。
在这个项目中,我有以下两个类:
class Quote
{... class fields}
class Quotes:IEnumerable<Quote>
{ List<Quote> list = new List<Quote>(); }
class Main
{
Quotes quotelist = new Quotes;
}
第二个项目是简单的 UI,旨在使用 WPF 在屏幕上呈现来自第一个项目的数据。
为此我创建了一个ObservableCollection:
ObservableCollection<Quote> quotes = new ObservableCollection<Quote>(quotelist);
然后,我将 XAML 中的引号绑定到网格。
这不起作用意味着对列表的更改不会更新。我想我可能会尝试在第一个项目中将List 替换为ObservableCollection,但如果可能的话,我宁愿不这样做。
最好的做法是什么。在我看到的所有示例中,列表 (ObservableCollection) 是在 ViewModel 级别上创建的。就我而言,列表是在较低级别创建和更新的。
如何让引号(ObservableCollection)知道引号列表(列表)的变化?我希望我的描述有意义。
【问题讨论】:
-
1.当您将列表传递给 ObservableCollection 构造函数时,它只是将项目从集合复制到 ObservableCollection。对原始列表的任何更改都不会反映在 ObservableCollection 中。 2. ObservableCollection 定义在 System.ObjectModel.dll 中,并不特定于 WPF 或任何其他框架。您可以在 poco 类、业务逻辑或数据访问组件中使用它。
-
也许你不需要在业务数据发生变化时通知 ui,因为它们只有在用户执行某些操作时才会发生变化,例如调用命令。然后您可以在更改业务组件后在命令处理程序中刷新您的 ui
-
这是不正确的。大多数更改是由于与外部服务器通信而执行的。如果有的话,用户输入是最少的。
-
好的,但是谁触发了通信?我的意思是这样的:`await quotesRepository.LoadData(); OnPropertyChanged("报价");
-
我决定在项目一中使用 ObservableCollection 代替 List。它有效,但偶尔会引发异常。我希望我使用 C# 论坛上解释的所谓调度程序解决了它。我不明白它的想法,但它似乎到目前为止工作。回答您的问题:沟通是双向的。我的程序设置异步通信端口并监听它。如果需要向服务器发送任何内容,我的程序还可以通过同步通信端口触发通信。
标签: wpf list data-binding observablecollection