C# 如何在WPF数据网格中创建互斥列?

C# 如何在WPF数据网格中创建互斥列?,c#,.net,wpf,visual-studio-2010,wpfdatagrid,C#,.net,Wpf,Visual Studio 2010,Wpfdatagrid,这是我目前的问题: 我有一个包含4列的数据网格:第一年按索引、第一年按百分比、第二年+按索引和第二年+按百分比。我希望我的数据网格使这些列与其对应列互斥 例如,如果我按百分比输入第一年的数字,我不应该被允许按索引输入第一年的任何内容,反之亦然。同样的情况也发生在两个以上的栏目之间 如果不是锁定列,而是删除另一列的值(即,在上面的示例中,不是无法按索引编辑第一年,而是使其按百分比删除第一年的值),我将非常高兴 有什么想法吗 编辑:到目前为止,我一直在尝试:当某些内容发生更改时,我尝试调整相邻列的“

这是我目前的问题:

我有一个包含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的来源。

当单元格值更改时,找到父列,然后为空和/或禁用“互补”列。