我的窗口上有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;
答案 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
或者,您可以在开始编辑之前序列化对象,如果取消编辑,则可以反序列化已保存的状态。