WPF绑定查询 - 数据网格中的切换按钮

时间:2017-12-14 10:56:33

标签: wpf xaml mvvm

我尝试在包含DataGrid的{​​{1}}中创建一个列。按钮的ToggleButton属性绑定到我的数据项中的IsChecked属性(实现IsSelected)。

单击按钮时,我的第一次尝试无法更新INotifyPropertyChanged,即使在其他位置设置时正确显示了该值。

IsSelected

在stackexchange周围搜索,我找到了几个解决方案:

设置绑定的<DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate DataType="{x:Type local:DataItem}"> <ToggleButton IsChecked="{Binding IsSelected}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 属性

UpdateSourceTrigger

或使用相对绑定

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate DataType="{x:Type local:DataItem}">
            <ToggleButton IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我的问题是,为什么使用直接绑定需要显式设置<DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate DataType="{x:Type local:DataItem}"> <ToggleButton IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}, Path=DataContext.IsSelected}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> ,而相对绑定方法不需要?

1 个答案:

答案 0 :(得分:1)

这是因为What do you want? >> None 具有内部事务行为,由DataGrid实现,并且通常不会更新源,直到提交编辑为止。如果您的数据对象实现了BindingGroup接口,您将注意到在编辑单元格值时将调用其IEditableObjectBeginEdit()方法。

有关详细信息,请参阅MSDN论坛上的以下主题:https://social.msdn.microsoft.com/Forums/vstudio/en-US/7f7196b8-b9dc-487d-93cd-e77f5b3d9906/confused-about-transactional-editing-edititemcanceledit?forum=wpf