假设我有这个 Model 类(数据库由它生成):
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string City { get; set; }
}
在 ViewModel 中,我有一个ObservableCollection Customers用于保存来自数据库的所有客户:
ObservableCollection<Customer> Customers;
"Customers" 是从数据库中获取的。
在一个视图中,ListBox 是从 Customers 中获取的:
<ListBox ItemsSource="{Binding Customers}" />
这里有一个问题。假设我想将新客户插入数据库,为了通过UI跟踪更改,应该采取什么方法:
重置ItemsSource:(目前使用的是最差的方法)
ListBoxExample.ItemsSource = null;
ListBoxExample.ItemsSource = Customers;
通过ObservableCollection Customers跟踪更改
例如,如果我想将某些内容插入到数据库中,也将其插入到Customers列表中,UI将会收到更改的通知。
还有哪些选项?
实现以下最佳MVVM方法:
- 解析JSON数据并将其插入本地数据库
- 从本地数据库检索数据并用它填充ListBox/ListView
- 如果新数据已插入到数据库或删除/更改了项目,请在ListBox/ListView中更新更改
如果我想向数据库中添加项目,只需将项目简单地添加到Customers列表中并将其添加到数据库即可。但是,假设我从数据库中删除了一个对象,则可观察集合“Customers”不会收到通知,而且将失去同步(UI也不会更新)。是否有一种方式可以深入了解MVVM结构,而不是在observable collection和数据库中添加/删除/更改项目,以某种方式使可观察集合跟踪数据库中的更改(例如,如果通过其他应用程序进行更改)。
<ListBox ItemsSource="{Binding Customers}"
- user1228