WPF DataGrid:检查某些列并更新

时间:2014-06-18 06:36:16

标签: c# wpf datagrid wpfdatagrid

在我的WPF应用程序中,我有一个DataGrid。例如,图片中的那个:enter image description here

在第一行中,Name是a0,Value是0x12(十六进制),我们称之为a0 [Value]。所以我需要做的是确保: a0 [Value]< a1 [值]< A2 [数值] 即可。还 b0 [值]< b1 [值]< b2 [值] , c0 [Value]< C1 [数值] 即可。我不能依赖于Name始终是第一列而Value始终是第4列的事实。我知道Name列将始终具有值a0,a1,a2,b0,b1,b2,c0,c1但我不知道它的顺序。并且使其更复杂,例如, a0 [Value]> a1 [值] ,我需要更改a1 [值],以便 a1 [值] = a0 [值] 。我真的需要你的帮助。

1 个答案:

答案 0 :(得分:0)

在WPF中,我们不操纵UI元素。相反,我们操纵数据元素。因此,如果您将数据绑定到DataGrid.ItemsSource属性并在显示之前操作数据,那么您的问题就变得容易多了:

<DataGrid ItemsSource="{Binding Items}" ... />

您应始终使用自定义类(实现INotifyPropertyChanged interface)来表示您的数据,因为它使一切变得如此简单。在您的示例中,我们可以看到您的类(我们将其命名为Item)应该有四个属性:NameSomeColBlahValue。然后您的收藏品应为ObservableCollection<Item>类型:

public ObservableCollection<Item> Items
{
    get { return items; }
    set
    {
        items = value;
        NotifyPropertyChanged("Items");
    }
}

现在您需要做的就是对数据进行排序。有许多不同的方法可以实现这一点,并且具有不同的复杂程度,但使用LinQ可以提供帮助。首先,我们希望按Name列中的第一个字母对数据进行排序,该列现在由您班级中的Name属性表示,然后您需要按{{1}对项目进行排序属性。我现在无法检查这个,但是这应该可以解决问题,或者让你在某个地方接近:

Value