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 应该是添加到 ObservableCollectionitem 上的属性。也就是说,如果您试图从您的收藏中删除该项目..

【讨论】:

问题是我不想遍历ObservableCollection 中的所有项目并使其全部成为ControlsEnabled = trueControlsEnabled = false...

以上是关于DataGrid中按钮的可见性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在鼠标悬停时更改 DataGrid ScrollBar 的可见性?

RowDoubleClick 上的 DataGrid RowDetails 可见性

绑定 datagrid 列可见性 MVVM

WPF DataGrid的可见性

asp:异步的DataGrid可见性?

.btn btn-primary * 可见性:隐藏; 不工作[重复]