DataGrid中按钮的可见性[重复]
Posted
技术标签:
【中文标题】DataGrid中按钮的可见性[重复]【英文标题】:Visibility of a Button in DataGrid [duplicate] 【发布时间】:2013-09-09 08:58:21 【问题描述】:我有一个包含三列的 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>
谢谢!
【问题讨论】:
ControlsEnabled
的属性是什么?你的窗户?
是的,它是我的窗口的属性。
【参考方案1】:
您可以使用绑定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" />
【讨论】:
所以如果我有一个名为xyz.ControlsEnabled
的对象并且我想在我的示例中使用它,那么我应该怎么做? xyz
与我的 ObservableCollection
中的项目无关
@Jacek 取决于您的DataContext
是什么,但类似于xyz.ControlsEnabled
ControlsEnabled 必须可以通过某些控件 DataContext 访问。例如如果您的主 ViewModel 具有属性 ControlsEnabled 并绑定到您的 Window 的 DataContext 您将需要使用我的第二个示例。【参考方案2】:
ControlsEnabled
应该是添加到 ObservableCollection
的 item
上的属性。也就是说,如果您试图从您的收藏中删除该项目..
【讨论】:
问题是我不想遍历ObservableCollection
中的所有项目并使其全部成为ControlsEnabled = true
或ControlsEnabled = false
...以上是关于DataGrid中按钮的可见性[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在鼠标悬停时更改 DataGrid ScrollBar 的可见性?