0

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;
4

1 回答 1

2

您似乎正在创建一个不在ObservableCollection中的新客户对象

tempCustomerobj = new Customer(c);

然后编辑该对象。

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

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

于 2013-01-31T04:25:21.963 回答