DataGrid中按钮的可见性

Jac*_*cik 2 c# wpf

我有一个包含三列的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>
Run Code Online (Sandbox Code Playgroud)

谢谢!

msw*_*cki 5

您可以使用Binding RelativeSource.阅读如何使用与RelativeSource的WPF绑定?

例如:

{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
Run Code Online (Sandbox Code Playgroud)

或使用Binding ElementName跳转到特定的控制数据上下文.

<Window ... x:Name="_this">
    <Button Visibility="{Binding ElementName=_this, Path=DataContext.ControlsEnabled, Converter={StaticResource boolToVisibilityConverter}}" />
Run Code Online (Sandbox Code Playgroud)