时间:2010-07-26 15:09:40

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

1 个答案:

答案 0 :(得分:1)

如果您正在使用某种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。否则,在用户按下回车键或选择不同的行之前,上述的setter代码将不会运行。

PS:我正在使用MVVM-Light,这是RaisePropertyChanged的来源。