0

私はObservableCollection<Customer>私の窓にいます。

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

これObservableCollectionはウィンドウにバインドさListViewれています。[顧客の選択]を使用してlistView[編集]をクリックすると、選択した顧客のデータを含む新しいウィンドウが表示されます。

2番目のウィンドウのコンストラクタ

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にない新しいCustomerオブジェクトを作成しているようです

tempCustomerobj = new Customer(c);

次に、その新しいオブジェクトを編集します。

CustomerDataGrid.DataContext = tempCustomerobj;

これを行っても、 ObservableCollectionに残っている元のCustomerオブジェクトにはまったく影響しません。

解決するには、新しい顧客を作成するのではなく、既存の顧客を編集します。

アップデート

あなたのコメントに基づいて

この線

customerobj = c; //Original object

実際ににあるオブジェクトcustomerobjのエイリアスになります。cObservableCollection

この線

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 に答える