Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf ObservableCollection不更新_Wpf_Binding - Fatal编程技术网

Wpf ObservableCollection不更新

Wpf ObservableCollection不更新,wpf,binding,Wpf,Binding,我的窗口上有可观察到的采集 ObservableCollection<Customer> customers = new ObservableCollection<Customer>(); public ObservableCollection<Customer> Customers { get { return customers; } set { customers = value; OnPropertyChanged("Customers"); } }

我的窗口上有
可观察到的采集

ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
public ObservableCollection<Customer> Customers { get { return customers; } set { customers = value; OnPropertyChanged("Customers"); } }  
一旦用户单击“保存”按钮,客户对象将得到更新,窗口将关闭

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

customerobj = tempCustomerobj;

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

然后编辑新对象

这样做不会以任何方式影响仍在ObservableCollection中的原始Customer对象

要解决这个问题,不要创建新客户,而是编辑现有客户

更新

根据你的评论

线路

customerobj = c; //Original object
使
customerobj
成为
c
的别名,您的对象实际上位于
可观察集合中

线路

customerobj = tempCustomerobj;
使
customerobj
现在成为
tempCustomerobj
的别名,tempCustomerobj是您全新的客户对象,它(我假定)是
c
的克隆

将构造函数更改为

public EditCustomerWindow(Customer c)
{
    InitializeComponent();

    CustomerDataGrid.DataContext = c;
}  
更新2


正在编辑的对象应支持IEditableObject。看


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

这就是我分配
customerobj=tempCustomerobj以在离开窗口之前反映更改。错了吗?是的,错了。符号customerobj是您当前分配给它的任何实际对象的别名。根据您的代码,您应该只将c分配给DataContext,而不使用customerobj或tempCustomerobj;如果我将
c
分配给
DataContext
observateCollection,则即使用户在更改某些字段值后取消编辑,也会更新observateCollection。您正在编辑的对象应支持IEditableObject。看见或者,如果编辑被取消,您可以在开始编辑之前序列化对象,并反序列化保存的状态。如果您可以使用以前的注释编辑您的答案,我可以将您的答案标记为已接受。:)。谢谢你的指导。
customerobj = c; //Original object
customerobj = tempCustomerobj;
public EditCustomerWindow(Customer c)
{
    InitializeComponent();

    CustomerDataGrid.DataContext = c;
}