【发布时间】:2011-10-28 00:12:39
【问题描述】:
我正在尝试使用绑定到具有两个参数的对象集合的数据网格。数据网格必须允许我插入新行,从而创建新对象。
绑定到第一个参数的第一列是文本列。 第二个应该是一个模板列,包含一个单选按钮,它使用 BoolToInt 转换器(不相关)将值设置为第二个属性。
当在网格中显示已经存在的行时,它还会显示一个用于插入新对象的空行。因此,我们有两种在列表/网格中插入新对象的可能性: 1. 我们首先在文本栏中输入一些内容,然后我们检查单选按钮 2.首先我们检查单选按钮,然后我们在文本列中输入一些内容
第一个选项,效果很好。第二个没有: 当我检查单选按钮然后在文本列中输入一些内容时,单选按钮就会被取消选中。实际上它消失了,因为当我开始输入文本时,在网格中创建了一个新行,并带有一个新的单选按钮。我第一次检查的那个只是空行上的那个,它允许我添加新行,并且每当我插入新行时它都会一直到列表的底部。
我认为这应该通过在检查单选按钮时强制网格创建一个新行来解决,就像在文本列中键入时一样。
这是数据网格:
<DataGrid ItemsSource="{Binding Path=Rows}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=param1, TargetNullValue=''}">
</DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RadioButton VerticalAlignment="Center" IsChecked="{Binding Path=param2, Converter={StaticResource RPLBoolToIntConverter}, ConverterParameter=1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
这是后面的代码,创建了一些要显示的对象:
CPL cpl = new CPL();
cpl.Rows = new List<CPLRow>()
{
new CPLRow(){ param1=80001, param2=20304},
new CPLRow(){ param1=80002, param2=20304},
new CPLRow(){ param1=80003, param2=20304}
};
DataContext = cpl;
有没有办法让它对检查单选按钮做出反应。我正在考虑一个示例,我只想使用单选按钮,每当我检查一个单选按钮时,都会创建一个新行,同时仍能正确绑定到集合。
提前致谢!
【问题讨论】:
-
您在检查单选按钮并将元素添加到网格时尝试过 DataGridRowEditEndingEventArgs 吗?
标签: wpf datagrid binding radio-button