2012-11-17 37 views
0

我有一個DataGrid,綁定到一個列表:Datagrid的 - 不要在每個屬性的變化更新,只保存

<DataGrid HorizontalAlignment="Left" SelectedItem="{Binding CurrentPlayer}" Height="374" Margin="121,22,0,0" RowHeaderWidth="0" VerticalAlignment="Top" Width="836" ItemsSource="{Binding Players}" AutoGenerateColumns="false" IsReadOnly="True" SelectionMode="Single" > 

正如你可以看到,當一個項目被選中,它存儲在CurrentPlayer屬性。該對象的屬性綁定到用戶可以編輯值的文本框。

我遇到的問題是:由於綁定,當用戶編輯信息(編輯玩家姓名,地址,..)時,數據網格中立即顯示更改,即使用戶沒有按保存按鈕呢。

,我不希望出現這種情況很明顯,因爲也取消選項和驗證。我知道你可以綁定一次或一種方式,但是當用戶按下保存按鈕時,應該顯示更改。

有沒有辦法做到這一點?

回答

0

一個可能的解決方案:

對視圖模型一個基類:

class BaseClassViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      Debug.Print(info); 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 

使每個屬性的每個字段中選擇的對象在這種形式獲取設置屬性:

public string FieldInObject 
    { 
     get 
     { 
      return _FieldInObject; 
     } 
     set 
     { 
      if (value != _FieldInObject) 
      { 
       _FieldInObject = value; 
       //do not add this code here 
       //NotifyPropertyChanged("CurrentPlayer"); 
      } 
     } 
    } 

當用戶按下保存按鈕,然後使用

NotifyPropertyChanged("CurrentPlayer"); 
NotifyPropertyChanged("<Property 1 in currentPlayer>"); 
..... 
NotifyPropertyChanged("<Property n in currentPlayer"); 

應該通知WPF更新CurrentPlayer。

我希望這是有點理解的。只需使用NotifyPropertyChanged來指示WPF更新綁定到該屬性的字段。

+0

因爲有生成的類,我不能改變對象的屬性的get/set-部分.. – Bv202

+0

你可以使用一個包裝類呢?還是一個界面? – Lucian

相關問題