2010-07-26 44 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的来源。