我有一个包含三列的DataGrid。
第三列中有一个删除按钮。 它的可见性取决于名为'ControlsEnabled'的布尔属性。
DataGrid由'ObservableCollection'中的项填充。
问题是'ControlsEnabled'不是'ObservableCollection'中项目的属性,它不应该是。 'ObservableCollection'是另一个类的属性。
问题:如何更改我的XAML描述以解决我的问题?
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=field1}"
Width="140"
Header="head1"/>
<DataGridTextColumn Binding="{Binding Path=field2}"
Width="140"
MinWidth="50"
Header="head2"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Padding="5"
Click="DeleteButton_Click"
Tag="{Binding}"
Content="X"
Visibility="{Binding Path=ControlsEnabled, Converter={StaticResource boolToVisibilityConverter}}">
<Button.ToolTip>
<TextBlock>
Delete
</TextBlock>
</Button.ToolTip>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
谢谢!
答案 0 :(得分:5)
您可以使用Binding RelativeSource。阅读How do I use WPF bindings with RelativeSource?
例如:
{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
或使用Binding ElementName跳转到特定的控制数据上下文。
<Window ... x:Name="_this">
<Button Visibility="{Binding ElementName=_this, Path=DataContext.ControlsEnabled, Converter={StaticResource boolToVisibilityConverter}}" />
答案 1 :(得分:0)
ControlsEnabled
应该是item
上添加到ObservableCollection
的属性。也就是说,如果您尝试从集合中删除该项目..