C# 如何在WPF数据网格中创建互斥列?
这是我目前的问题: 我有一个包含4列的数据网格:第一年按索引、第一年按百分比、第二年+按索引和第二年+按百分比。我希望我的数据网格使这些列与其对应列互斥 例如,如果我按百分比输入第一年的数字,我不应该被允许按索引输入第一年的任何内容,反之亦然。同样的情况也发生在两个以上的栏目之间 如果不是锁定列,而是删除另一列的值(即,在上面的示例中,不是无法按索引编辑第一年,而是使其按百分比删除第一年的值),我将非常高兴 有什么想法吗C# 如何在WPF数据网格中创建互斥列?,c#,.net,wpf,visual-studio-2010,wpfdatagrid,C#,.net,Wpf,Visual Studio 2010,Wpfdatagrid,这是我目前的问题: 我有一个包含4列的数据网格:第一年按索引、第一年按百分比、第二年+按索引和第二年+按百分比。我希望我的数据网格使这些列与其对应列互斥 例如,如果我按百分比输入第一年的数字,我不应该被允许按索引输入第一年的任何内容,反之亦然。同样的情况也发生在两个以上的栏目之间 如果不是锁定列,而是删除另一列的值(即,在上面的示例中,不是无法按索引编辑第一年,而是使其按百分比删除第一年的值),我将非常高兴 有什么想法吗 编辑:到目前为止,我一直在尝试:当某些内容发生更改时,我尝试调整相邻列的“
编辑:到目前为止,我一直在尝试:当某些内容发生更改时,我尝试调整相邻列的“AllowEdit”字段(这没有任何作用),并尝试清除另一列中的值(也失败)。如果您使用某种MVVM模式,则在表示行数据的viewmodel中,你可以这样做:
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。否则,除非用户按enter键或选择其他行,否则上述setter代码将不会运行
PS:我使用的是MVVM Light,这是RaisePropertyChanged的来源。当单元格值更改时,找到父列,然后为空和/或禁用“互补”列。