2016-08-02 51 views
0

我有一个DataTemplate:如何将DataTemplate元素的可见性绑定到祖先元素的ViewModel属性?

<DataTemplate x:Key="BMSelectedItemTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="*" Visibility=???/> 
      <TextBlock Text="{Binding Name}"/> 
     </StackPanel> 
    </DataTemplate> 

我有使用上述模板DataTemplateSelector:

 <StackPanel x:Name="splBookmark" Visibility="{Binding ShowBookmark, Converter={StaticResource BooleanToVisibilityConverter}}"> 
      <ComboBox x:Name="cbBookmark" ItemTemplateSelector="{StaticResource BookmarkItemDataTemplateSelector}"/> 
     </StackPanel> 

我的观点:

<BookmarkItemDataTemplateSelector x:Key="BookmarkItemDataTemplateSelector" SelectedItemTemplate="{StaticResource BMSelectedItemTemplate}" 
                         DropdownItemsTemplate="{StaticResource BMDropdownItemTemplate}" /> 

我在组合框使用上面的数据模板选择模型具有属性ShowBookmark和ShowAsterisk。我想将BMSelectedItemTemplate中“*”的可见性绑定到我的视图模型的属性ShowAsterisk。我怎么能这样做?我想:

能见度=“{结合ShowAsterisk,转换器= {StaticResource的BooleanToVisibilityConverter}}”

但它没有工作,故称数据模板不能找物业ShowAsterisk,我觉得这是有道理的,因为数据模板绑定到MBookmark对象列表,而在我的MBookmark类中没有ShowAsterisk的属性。 ShowAsterisk是与splBookmark堆栈面板绑定的视图模型的属性。

我的问题是如何将祖先元素的视图模型属性绑定到我的数据模板元素的可见性?

我不能使用相对路径祖先类型来查找我的组合框或堆栈面板,似乎我只能在我的相对源中使用self或TemplateParent。我使用silverlight。

谢谢!

+0

请参阅标记复制该地址是如何的几个堆栈溢出问题中的一个例子绑定到当前元素的父视图模型。 –

+0

嗨我看看重复的问题,但似乎我不能在我的绑定中使用相对源,它无法在RelativeSource中找到AncestorType属性。我有任何其他方式来访问splBookmark吗? – spspli

+0

听起来像你没有正确输入绑定。但没有一个好的[mcve]能够可靠地再现你的问题,所以不可能确定问题是什么。我可以向你保证,只要你正确地使用它,'RelativeSource'确实有效。 –

回答

1

在WPF中,您可以使用RelativeSource爬上视觉树。

假设你的项目容器是ListBox

Visibility="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, 
        Path=DataContext.ShowAsterisk, 
        Converter={StaticResource BooleanToVisibilityConverter}}" 

在UWP app,其中RelativeSource不可用,则可以使用ElementName代替。

首先,命名的项的控制:

<ComboBox Name="MyComboBox" /> 

然后,在结合使用:

Visibility="{Binding ElementName=MyComboBox, 
        Path=DataContext.ShowAsterisk, 
        Converter={StaticResource BooleanToVisibilityConverter}}" 
+0

我的项目容器是一个组合框,组合框在堆叠面板上。我无法使用上述代码来查找ComboBox,因为它抱怨AncestorType不是RelativeSource的属性。你知道有什么原因可能导致这种情况吗? – spspli

+0

这是一个UWP(商店)应用程序或WPF应用程序? –

+0

这是一个UWP应用程序。 – spspli

相关问题