2

我有一个包含三列的 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>

谢谢!

4

2 回答 2

5

您可以使用绑定RelativeSource。阅读如何将 WPF 绑定与 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}}" />
于 2013-09-05T13:40:55.497 回答
0

ControlsEnabled应该item是添加到您的ObservableCollection. 也就是说,如果您试图从您的收藏中删除该项目..

于 2013-09-05T13:36:21.433 回答