我有一个类型为telerikDocking:RadDocumentPane的视图。此视图上的第一个视觉元素,以及所有其他视觉元素的容器,是一个x:Name="MainGrid"的Grid。
如果我将网格的一个属性绑定到ViewModel上的一个公共属性,也就是它的DataContext,它就会工作并看到它
在这个网格中是一个telerik:RadGridView,它的一列是一个Delete按钮,其可见性属性绑定到GridviewRow的IsSelected属性。这也很好。
我需要能够基于在ViewModel的公共属性中处理的其他条件来覆盖按钮的可见性。为了实现这一点,我将按钮封装在StackPanel中,并试图将其Visibility绑定到ViewModel的公共属性,无论我使用什么RelativeSource语法,我都无法访问VieModel上的该属性。
这是删除按钮的XAML:
<telerik:GridViewDataColumn>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<StackPanel Visibility="{Binding ???}">
<telerik:RadButton Width="70"
Command="telerik:RadGridViewCommands.Delete"
CommandParameter="{Binding}"
Content="Delete"
IsEnabled="{Binding UserHasCofundingRole}"
Visibility="{Binding IsSelected,
RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}},
Converter={StaticResource booleanToVisibilityConverter}}" />
</StackPanel>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>
以下是我为StackPanel的Visibility尝试的所有绑定语法,但没有一次达到ViewModel:
{Binding DataContext.DeleteButtonVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadDocumentPane}}, Converter={StaticResource booleanToVisibilityConverter}}
{Binding ViewModel.DeleteButtonVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadDocumentPane}}, Converter={StaticResource booleanToVisibilityConverter}}
{Binding ElementName=MainGrid, Path=DataContext.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}
{Binding ElementName=LayoutRoot, Path=ViewModel.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}
{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=DataContext.DeleteButtonVisible, Converter={StaticResource booleanToVisibilityConverter}}
尝试这样绑定:
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path= DataContext.YourPublicProp}
如果您在Window、Page或smt-else中,请将"UserControl"替换为正确的类型。