Radiobutton不会在Datagrid new Row中生成对象

时间:2016-02-24 00:07:44

标签: c# wpf datagrid

根据我的理解,当在Datagrid中使用“新行”时,它会在设置其中一个属性时创建和对象。

这适用于DataGridTextColumn,当我在其中写入内容时会创建对象。但是我也有一些DataGridTemplateColumn包含每个单选按钮。单击它们时,它应该生成对象,因为我正在设置所述对象的属性。

但它不是,正如你在下一个屏幕截图中看到的第一行被命名,然后我点击一个单选按钮,一切都很好

然后在第二行,我只是单击单选按钮,它也应该创建一个对象,但它不是,我可以告诉我能够点击相同行的RadioButton倍数,因为GroupName在初始化构造

注意: X是单选按钮(X =已选中,空=未选中)

enter image description here

只要我在文本中输入内容,就会构造对象,初始化GroupName并将radiobutton设置为其默认值(第一列)

enter image description here

我已经通过记录链接到这些单选按钮的属性的“set”来检查TwoWay绑定是否正常工作,并且它正常工作。

单击单选按钮时,如何强制构造对象?

编辑:我尝试过的事情:

  • 实施IEditableObject - >单击radiobuttons不会触发编辑模式
  • 设置CellEditTemplate - >同样,单击radiobuttons时不会触发列的编辑模式

所以这至少缩小为:如何点击包含DataGridTemplateColumn的{​​{1}}时触发编辑模式就像你想要RadioButton一样双击

编辑2:根据评论的要求,这是我的数据网格的XAML

DataGridTextColumn

模特:

<DataGrid ItemsSource="{Binding Theme.Competences}" AutoGenerateColumns="False" RowHeaderWidth="0"
  ColumnWidth="*" IsReadOnly="False" ColumnHeaderStyle="{StaticResource FullBorderDataGrid}" SelectionUnit="Cell"
  CanUserResizeColumns="False" CanUserReorderColumns="False" CanUserSortColumns="False">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Compétence" Binding="{Binding Label}" />
        <DataGridTextColumn Header="Description" Binding="{Binding Description}" />
        <DataGridTemplateColumn Header="1" Width="10">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding GUID}" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                                                                Converter={l:EnumMatchToBooleanConverter},
                                                                ConverterParameter=One}" 
                                                                Style="{StaticResource XRadioButton}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="2" Width="10">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding GUID}" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                                                                Converter={l:EnumMatchToBooleanConverter},
                                                                ConverterParameter=Two}" 
                                                                Style="{StaticResource XRadioButton}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="3" Width="10">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding GUID}" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                                                                Converter={l:EnumMatchToBooleanConverter},
                                                                ConverterParameter=Three}" 
                                                                Style="{StaticResource XRadioButton}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="4" Width="10">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding GUID}" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                                                                Converter={l:EnumMatchToBooleanConverter},
                                                                ConverterParameter=Four}" 
                                                                Style="{StaticResource XRadioButton}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="NA" Width="10">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton GroupName="{Binding GUID}" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,
                                                                Converter={l:EnumMatchToBooleanConverter},
                                                                ConverterParameter=NA}" 
                                                                Style="{StaticResource XRadioButton}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTextColumn Header="Commentaire" Binding="{Binding Comment}" />
    </DataGrid.Columns>
</DataGrid>

双击DataGridTextColumn时调用IEditableObject.BeginEdit但从不使用DataGridTemplateColumn

1 个答案:

答案 0 :(得分:1)

将此添加到您的数据网格:

<DataGrid AddingNewItem="dataGridView_AddingNewItem"....

在代码中:

void dataGridView_AddingNewItem(object sender, System.Windows.Controls.AddingNewItemEventArgs e)
{
    var item = new Competence();
    // Change item's values here.
    e.NewItem = item;
}