ObservableCollection不会更新

时间:2013-01-31 04:22:17

标签: wpf binding

我的窗口上有ObservableCollection<Customer>

ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
public ObservableCollection<Customer> Customers { get { return customers; } set { customers = value; OnPropertyChanged("Customers"); } }  

ObservableCollection已绑定到窗口上的ListView。一旦使用从listView选择客户并点击编辑,将出现一个包含所选客户数据的新窗口。

第二个窗口的构造函数

public EditCustomerWindow(Customer c)
{
    InitializeComponent();

    customerobj = c; //Original object
    tempCustomerobj = new Customer(c); //Getting a copy of the customer object

    CustomerDataGrid.DataContext = tempCustomerobj;
}  

用户点击保存按钮后,客户对象将会更新,窗口将关闭。

但我的问题是ObserverCollection在第一个窗口没有得到更新,即使我在编辑窗口关闭之前设置了新编辑的客户对象。找不到我做错了什么。请指教。

customerobj = tempCustomerobj;

1 个答案:

答案 0 :(得分:2)

您似乎正在创建一个不在 ObservableCollection

中的 Customer对象
tempCustomerobj = new Customer(c);

然后编辑 new 对象。

CustomerDataGrid.DataContext = tempCustomerobj;

这样做不会影响仍在 ObservableCollection 中的原始Customer对象。

要解决此问题,请不要创建客户,而是编辑现有客户。

更新

根据您的评论

该行

customerobj = c; //Original object

导致customerobj成为c的别名,您的对象实际上位于ObservableCollection

该行

customerobj = tempCustomerobj;

导致customerobj现在成为tempCustomerobj的别名,这是您的全新Customer对象(我推测)c克隆

将构造函数更改为

public EditCustomerWindow(Customer c)
{
    InitializeComponent();

    CustomerDataGrid.DataContext = c;
}  

更新2

您正在编辑的对象应该支持IEditableObject。见

https://stackoverflow.com/a/1091240/141172

或者,您可以在开始编辑之前序列化对象,如果取消编辑,则可以反序列化已保存的状态。