是否可以绑定两个DataGrid列以及如何绑定?

时间:2015-12-01 19:37:08

标签: wpf xaml

两个int列都可以编辑。默认行为是B列中的每个值至少应等于A列中输入的每个相应记录值。

我们的想法是从ColumnA到ColumnB使用某种OneWay DataBinding。如果这是一个单独的标签场景,那么在XAML中很容易实现;绑定列怎么样?是否可能,如果是的话怎么样?

    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Header="A" />
            <DataGridTextColumn Header="B" />
        </DataGrid.Columns>
    </DataGrid>

1 个答案:

答案 0 :(得分:4)

首先创建数据对象以表示每行数据

public class MyDataObject : INotifyPropertyChanged
{
    // properties are simplified - google INotifyPropertyChanged to setup correctly
    public int A { get; set; }
    public int B { get; set; }
}

接下来创建这些对象的集合,并将其设置为DataGrid.ItemsSource(更好的想法是绑定属性,但我在这里保持简单)

var items = new ObservableCollection<MyDataObject>();
// add items to collection here

myDataGrid.ItemsSource = items;

确保您的XAML中的DataBinding设置正确

<DataGrid x:Name="myDataGrid">
    <DataGrid.Columns>
        <DataGridTextColumn Header="A" Binding="{Binding A}" />
        <DataGridTextColumn Header="B" Binding="{Binding B}" />
    </DataGrid.Columns>
</DataGrid>

然后最后在MyDataObject课程中实现您希望的任何特定逻辑或验证。如果您希望防止B大于A,请在set B访问器方法中添加该逻辑检查。这是一个可能的例子:

public int B
{
    get { return _b; }
    set 
    {
        if (value < A)
            return;

        _b = value;
        RaisePropertyChanged("B");
    }
}

或者,对于更高级的验证,您还可以选择实施IDataErrorInfo