如何在WPF中从通用样式绑定到自定义属性?

时间:2019-01-30 20:59:11

标签: c# .net wpf binding treeview

我有一个TreeView,其中包含一个HierarchicalDataTemplate,用于显示其项目。 HierarchicalDataTemplate充满了一个堆栈面板,其中包含一个Image和一个TextBlock

我将树形视图用作分层导航菜单。

分层数据模板的ItemsSource已绑定到ObservableCollection。该集合包含我自己的类 NavMenuItem 的实例。

NavMenuItem 不扩展UserControl或其他内容。这是一个纯C#类。 该类具有以下属性:

  • SubItems-更多NavMenuItem实例的集合(位于下面一级的菜单项)。
  • ViewName-表示视图名称的字符串。
  • IsActive-布尔值,当“菜单项”处于活动状态(用户在与菜单项相对应的视图中)时为True。
  • 标题-包含用于填充TextBlock的文本的字符串。

HierarchicalDataTemplate中,我只将TextBlock文本绑定到 NavMenuItem 的Title属性。这可以正常工作。

我还在App.xaml中创建了一种通用样式,该样式通常为任何TreeView定义了样式和模板。

现在,我想以某种方式将 NavMenuItem 的IsActive属性与树视图中控件TreeViewItem的IsExpanded属性耦合。这样,我可以从后面的代码中更改菜单项的展开状态。

如何完成?

ItemContainerStyle中使用TreeView来操纵TreeViewItem时,它仍然是带有{em> TargetType {{1 }}。框架不会知道属于它的视图模型(NavMenuItem)。因此,样式触发器只能直接使用Style框架控件中的属性。

0 个答案:

没有答案