【问题标题】:How do I make mutually exclusive columns in a WPF Data Grid?如何在 WPF 数据网格中创建互斥列?
【发布时间】:2011-03-21 03:41:00
【问题描述】:

这是我目前的问题:

我有一个包含 4 列的数据网格:第一年按索引,第一年按百分比,第二年+按索引,第二年+按百分比。我希望我的数据网格使这些列与其对应列互斥。

因此,例如,如果我在第一年按百分比输入数字,我不应该被允许在第一年按索引输入任何内容,反之亦然。 “第二年+”列彼此也是如此。

如果不是锁定列,而是删除另一列的值,我会很高兴(即在上面的示例中,而不是无法按索引编辑第一年,如果你这样做了,它会按百分比擦除第一年的值)。

有什么想法吗?

编辑:这是我迄今为止尝试过的:当某些东西发生变化时,我尝试调整相邻列的“AllowEdit”字段(这没有做任何事情),我尝试清除另一列中的值(也失败了)。

【问题讨论】:

  • 当单元格值改变时,找到父列然后空白和/或禁用“补充”列。

标签: c# .net wpf visual-studio-2010 wpfdatagrid


【解决方案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 的​​来源。

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多