DataGrid中按钮的可见性

时间:2013-09-05 13:32:52

标签: 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>

谢谢!

2 个答案:

答案 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的属性。也就是说,如果您尝试从集合中删除该项目..