【发布时间】:2025-12-29 01:20:12
【问题描述】:
我知道我可以使用以下代码将一个控件(例如 TextBox 绑定到 CheckBox 值):
<CheckBox Name="cb1" />
<TextBox IsEnabled="{Binding ElementName=cb1, Path=IsChecked}" />
我怎样才能在DataGrid 中做同样的事情?
我有一个DataGrid:
<DataGrid Name="xDataGridName" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Enable">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<flatcheckbox:FlatCheckBox x:Name="xDGCheck" Margin="0" IsChecked="{Binding Path=Enabled, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<flatcheckbox:FlatCheckBox x:Name="xDGCheck" Margin="0" IsChecked="{Binding Path=Enabled, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Group">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="xTextBlockName" Text="{Binding Path=Group}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!-- this is always enabled, i want it to be enable only when checkbox is checked -->
<TextBlock Name="xTextBlockName" Text="{Binding Path=Group}" IsEnabled="{Binding ElementName=xDGCheck, Path=IsChecked}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
如何在DataGrid 中实现绑定?
【问题讨论】:
-
什么是
FlatCheckBox?可以用通常的CheckBox替换,还是对问题很重要? -
您绑定到
Enabled源属性。 -
如果您要将状态传播到 VM 中,为什么不只是
IsEnabled="{Binding Path=Enabled}? -
@Vlad
FlatCheckBox只是一个应用了自定义样式的复选框。我将它绑定到复选框值(而不是Enabled),因为我希望在选中/取消选中复选框时立即启用/禁用文本框。将其绑定到启用,我必须选中复选框,失去该行的焦点,然后文本框才会启用,反之亦然 -
@mrid 我认为这是真正需要解决的问题。您是否尝试指定 UpdateSourceTrigger? IsChecked="{Binding Path=Enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
标签: c# wpf xaml data-binding datagrid