检查单选按钮时DataGrid生成新行

时间:2011-08-16 11:46:11

标签: wpf datagrid binding radio-button

我正在尝试使用绑定到具有两个参数的对象集合的数据网格。 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,每当我检查一个时,就会创建一个新行,同时仍然正确地绑定到集合。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不同意你的陈述,我刚检查的那个现在是在下一个空行。它仍然是相同的按钮,但还有另一行。我认为你的问题是在按钮失去焦点之前检查/检查事件没有触发(例如你去了文本框)。在绑定中,您需要设置UpdateSourceTrigger = PropertyChanged。