我正在尝试使用绑定到具有两个参数的对象集合的数据网格。 datagrid必须允许我插入新行,从而创建新对象。
与第一个参数绑定的第一列是文本列。 第二个应该是一个模板列,包含一个radiobutton,它使用BoolToInt转换器(不相关)将值设置为第二个属性。
当在网格中显示已存在的行时,它还会显示用于插入新对象的空行。因此,我们有两个在列表/网格中插入新对象的可能性: 1.我们首先在文本列中键入内容然后检查单选按钮 2.首先我们检查radiobutton,然后在文本列中输入内容
第一个选项,效果很好。第二个不是: 当我检查radiobutton然后在文本列中输入内容时,radiobutton就会被取消选中。实际上它消失了,因为当我开始输入文本时,在网格中创建了一个新的行,带有一个新的单选按钮。我第一次检查的那个只是空行上的一个允许我添加新行,每当我插入一个新行时它就会一直到列表的底部。
我认为这应该通过在检查radiobutton时强制网格创建一个新行来解决,就像在文本列中输入一样。
这是datagrid:
<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;
有没有办法让它对检查无线电按钮做出反应。我想的是一个例子,我只想使用radiobuttons,每当我检查一个时,就会创建一个新行,同时仍然正确地绑定到集合。
提前致谢!
答案 0 :(得分:0)
我不同意你的陈述,我刚检查的那个现在是在下一个空行。它仍然是相同的按钮,但还有另一行。我认为你的问题是在按钮失去焦点之前检查/检查事件没有触发(例如你去了文本框)。在绑定中,您需要设置UpdateSourceTrigger = PropertyChanged。