两个int列都可以编辑。默认行为是B列中的每个值至少应等于A列中输入的每个相应记录值。
我们的想法是从ColumnA到ColumnB使用某种OneWay DataBinding。如果这是一个单独的标签场景,那么在XAML中很容易实现;绑定列怎么样?是否可能,如果是的话怎么样?
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="A" />
<DataGridTextColumn Header="B" />
</DataGrid.Columns>
</DataGrid>
答案 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