2010-07-26 47 views
0

這是我目前的問題:如何在WPF數據網格中創建互斥列?

我有一個數據網格,其中有4列:索引一年,百分比,二年+索引,和二年+百分比。我想讓我的數據網格使這些列與其對應列互斥。

因此,例如,如果我按百分比輸入第一年的數字,我不應該按索引輸入第一年的任何數據,反之亦然。與第二年+列相同。

如果不鎖定列而不是鎖定列,它會清除其他列的值(例如,在上面的例子中,而不是不能按索引編輯Year One,如果你做到了,將從百分比中清除第一年的價值)。

任何想法?

編輯:這裏是我試過到目前爲止:我試圖調整時,某樣東西的變化(這並沒有做任何事情)的相鄰列的「AllowEdit」領域,我試圖在另一列清算價值(也失敗了)。

+0

當單元格值發生變化時,找到父列然後空白和/或禁用「互補」列。 – ChrisF 2010-07-26 15:12:05

回答

1

如果您正在使用某種形式的MVVM模式,然後在您的視圖模型,它表示一個行的數據,你可以做這樣的事情:

public const string YearOneByIndexPropertyName = "YearOneByIndex"; 
public int YearOneByIndex 
{ 
    get 
    { 
     return _yearOneByIndex; 
    } 

    set 
    { 
     if (_yearOneByIndex == value) 
     { 
      return; 
     } 

     _yearOneByIndex = value; 
     _yearOneByPercentage = 0 

     RaisePropertyChanged(YearOneByIndexPropertyName); 
     RaisePropertyChanged(YearOneByPercentagePropertyName); 
    } 
} 

public const string YearOneByPercentagePropertyName = "YearOneByPercentage"; 
public int YearOneByPercentage 
{ 
    get 
    { 
     return _yearOneByPercentage; 
    } 

    set 
    { 
     if (_yearOneByPercentage == value) 
     { 
      return; 
     } 

     _yearOneByPercentage = value; 
     _yearOneByIndex = 0; 

     RaisePropertyChanged(YearOneByIndexPropertyName); 
     RaisePropertyChanged(YearOneByPercentagePropertyName); 
    } 
} 

編輯:您還可以添加一些布爾屬性綁定到每列的IsReadOnly屬性,並使用相同的技術將備用列的一個設置爲true。

編輯:通過一些測試,我發現你必須將datagrid列的綁定UpdateSourceTrigger設置爲PropertyChanged。否則,直到用戶按下回車鍵或選擇不同的行時,上述設置器代碼纔會運行。 PS:我正在使用MVVM-Light,它是RaisePropertyChanged的來源。