我有一个类型为telerikDocking的视图:RadDocumentPane。此视图中的第一个可视元素和所有其他可视元素的容器是一个带有x:Grid =" MainGrid"的网格。
如果我将Grid的一个属性绑定到ViewModel上的公共属性,这是它的DataContext,它可以工作并看到它。
在这个网格中是一个telerik:RadGridView,它的一个列是一个Delete按钮,其可见性属性绑定到GridviewRow的IsSelected属性。这也很好。
我需要能够根据ViewModel上公共属性中处理的其他条件覆盖按钮的可见性。为了实现这一点,我将按钮包装在StackPanel中,并尝试将其Visibility绑定到ViewModel的公共属性,无论我使用何种RelativeSource语法,我都无法访问VieModel上的该属性。
以下是XAML for delete按钮:
<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的可见性尝试的所有绑定语法尝试,但没有一次尝试过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}}
答案 0 :(得分:1)
尝试像这样绑定:
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path= DataContext.YourPublicProp}
如果你在一个窗口或页面,或smt其他,替换&#34; UserControl&#34;正确的类型。