我在WPF中有一个数据集,我在其中一个列中使用一个自定义的多选择用户控件,如下所示:
<DataGridTemplateColumn
x:Name="APIColumnMulti"
Width="auto"
Header="Wirkstoff"
>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<usercontrols:MultiSelectCell
x:Name="multiSelect1"
Title="Wirkstoffe"
ChosenItems="{Binding ActiveIngredients, UpdateSourceTrigger=PropertyChanged}"
IsTemplateRow="{Binding IsTemplate, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding AllActiveIngredientsList, RelativeSource={RelativeSource AncestorType=UserControl}, UpdateSourceTrigger=PropertyChanged}"
TemplateName="TemplateProduct.ActiveIngredientList"
TemplateProduct="{Binding Source.Template, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
几乎一切都很好。但是,当我结束编辑我的multiselect时,数据行本身并没有被通知更改。因此,当我离开行时,如果没有编辑--例如,标准文本字段--内容就不会按应有的方式保存。
如何从CellTemplate的角度将行标记为已编辑/脏?
..。还是没有回答,所以也许我说得不够清楚。
我的MultiSelect有一个按钮,一个大的+,如果你点击它,一个对话框打开,你可以选择项目。然后单击"accept",对话框将关闭,所选的项将显示在单元格模板中(在usercontrol中)。但是该数据集没有被通知该单元格已被更改。因此,当我离开行时,不会触发RowEditEnding事件。
到目前为止,我发现的是:
您需要/应该在
我很迷茫。
发布于 2022-09-14 14:57:19
好的,我终于找到了解决办法。
在我的UserControl中,为了获得DataGrid实例,我不得不在可视化树上走得很远。然后一个dataGrid.BeginEdit()
和一个dataGrid.CommitEdit()
发挥了神奇的作用,并通知DataGrid当前编辑的行已经更改。这样,DataGrid在离开行或按Enter时调用ViewModel (需要IEditableObject
接口)上的EndEdit()。
https://stackoverflow.com/questions/73698826
复制相似问题