根据我的理解,当在Datagrid中使用“新行”时,它会在设置其中一个属性时创建和对象。
这适用于DataGridTextColumn
,当我在其中写入内容时会创建对象。但是我也有一些DataGridTemplateColumn
包含每个单选按钮。单击它们时,它应该生成对象,因为我正在设置所述对象的属性。
但它不是,正如你在下一个屏幕截图中看到的第一行被命名,然后我点击一个单选按钮,一切都很好
然后在第二行,我只是单击单选按钮,它也应该创建一个对象,但它不是,我可以告诉我能够点击相同行的RadioButton倍数,因为GroupName在初始化构造
注意: X是单选按钮(X =已选中,空=未选中)
只要我在文本中输入内容,就会构造对象,初始化GroupName并将radiobutton设置为其默认值(第一列)
我已经通过记录链接到这些单选按钮的属性的“set”来检查TwoWay绑定是否正常工作,并且它正常工作。
单击单选按钮时,如何强制构造对象?
编辑:我尝试过的事情:IEditableObject
- >单击radiobuttons不会触发编辑模式所以这至少缩小为:如何点击包含DataGridTemplateColumn
的{{1}}时触发编辑模式就像你想要RadioButton
一样双击} p>
编辑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
答案 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;
}