【问题标题】:WPF loading grid child based on treeview clickWPF基于treeview点击加载网格子
【发布时间】:2012-11-30 16:50:17
【问题描述】:

我正在开发一个 WPF C# 应用程序,其中有一个树视图控件,如果用户单击树中的一个节点,一个特定于节点的详细信息“表单”会出现在表单中其他位置的命名网格中。如果您单击树中的其他节点,则显示的详细信息表单会检查内容是否已保存、是否被关闭,并会在其位置出现一个新的详细信息表单。

我需要的是一些入门建议。我仍然可以将表单实现为独立的 xaml,然后在我小时候将表单放入的网格中放入一些“容器”吗?或者只是以某种方式将表单添加为网格子项。如何以编程方式在网格中加载我想要的表单并与之通信?

感谢您的帮助! 科里。

【问题讨论】:

    标签: wpf treeview


    【解决方案1】:

    使用事件聚合器设计模式,详见此处:

    http://martinfowler.com/eaaDev/EventAggregator.html

    然后,您可以使用其他代码通过事件聚合器侦听节点更改点击并相应地响应。这将解耦您的代码并使其更具可测试性。

    【讨论】:

      【解决方案2】:

      假设您使用的是 mvvm? 如果不阅读它 - 会更容易。

      然后您的表单上带有树视图,绑定到视图模型上的 itemsource。 通常,像树视图这样的项目控件上会有一个 selecteditem 属性。 将其绑定到视图模型上的属性,该属性属于树视图中包含的对象类型。以 CurrentSelectedItem 为例。

      您的详细信息“表单”可以是控件,也可以是同一表单上的任何内容。 现在取决于你的对象有多完整——你至少有两个选择。如果树视图中的对象已经包含您需要的所有数据,那么只需将详细信息绑定到 CurrentSelectedItem。

      显然它必须实现 INotifyPropertyChanged 来告诉绑定系统更新值。

      如果对象没有足够的信息,那么在 CurrentSelectedItem 的设置器上,您可以触发一个方法来加载完整的对象,然后将详细信息绑定到该完整的对象。

      Alternativley,另一种流行的方法,您可以将详细信息表单作为订阅消息的自包含控件,当它使用树视图对象的键接收消息时,它会加载所需的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多