【发布时间】:2016-12-08 03:22:30
【问题描述】:
我有一个数据模板:
<DataTemplate x:Key="BMSelectedItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="*" Visibility=???/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
我有一个使用上述模板的 DataTemplateSelector:
<BookmarkItemDataTemplateSelector x:Key="BookmarkItemDataTemplateSelector" SelectedItemTemplate="{StaticResource BMSelectedItemTemplate}"
DropdownItemsTemplate="{StaticResource BMDropdownItemTemplate}" />
我在组合框中使用上述数据模板选择器:
<StackPanel x:Name="splBookmark" Visibility="{Binding ShowBookmark, Converter={StaticResource BooleanToVisibilityConverter}}">
<ComboBox x:Name="cbBookmark" ItemTemplateSelector="{StaticResource BookmarkItemDataTemplateSelector}"/>
</StackPanel>
我的视图模型具有属性 ShowBookmark 和 ShowAsterisk。我想将 BMSelectedItemTemplate 中“*”的可见性绑定到我的视图模型的属性 ShowAsterisk。我怎么能那样做?我试过了:
Visibility="{Binding ShowAsterisk, Converter={StaticResource BooleanToVisibilityConverter}}"
但是没有用,它说数据模板找不到属性ShowAsterisk,我认为这是有道理的,因为数据模板绑定到MBookmark对象列表,而在我的MBookmark类中,没有ShowAsterisk的属性. ShowAsterisk 是绑定到 splBookmark 堆栈面板的视图模型的属性。
我的问题是如何将祖先元素的视图模型属性绑定到我的数据模板元素的可见性?
我无法使用相对路径祖先类型来查找我的组合框或堆栈面板,看来我只能在我的相对源中使用 self 或 TemplateParent。我用的是银光。
谢谢!
【问题讨论】:
-
有关如何绑定到当前元素的父视图模型的几个 Stack Overflow 问题之一的示例,请参阅标记的副本。
-
您好,我看看重复的问题,但似乎我无法在绑定中使用相对源,它在 RelativeSource 中找不到 AncestorType 属性。我还有其他方法可以访问 splBookmark 吗?
-
听起来您没有正确键入绑定。但是如果没有一个好的minimal reproducible example 可以可靠地重现您的问题,就不可能确定问题是什么。我可以向你保证,
RelativeSource确实有效,只要你正确使用它。 -
谢谢彼得,我也很困惑,因为当我使用 AncestorType 时,它会抱怨“无法识别或无法访问成员 AncestorType”。我仍在努力弄清楚为什么会发生这种情况。
-
嗨,彼得,我编辑了我的帖子。我认为这可能与它是一个 UWP 应用程序有关,我看到了这个:social.msdn.microsoft.com/Forums/vstudio/en-US/…
标签: c# mvvm binding uwp visibility