我正在开发一个WPF C#应用程序,其中我有一个树视图控件,如果用户单击树中的节点,则在表单中的其他位置的命名Grid中会出现特定于节点的详细信息'form'。如果单击树中的其他节点,则显示的详细信息表单将检查内容是否已保存,是否已取消,并且新的详细信息表单将显示在其中。
我需要的是一些开始的建议。我是否仍然可以将表单作为独立的xaml实现,然后在网格中放入一些“容器”,我将表单作为一个孩子投入?或者只是以某种方式将表单添加为网格子项。如何以编程方式在网格中加载我想要的表单并与之通信?
感谢您的帮助! 科里。
答案 0 :(得分:0)
使用事件聚合器设计模式,有关详细信息,请参阅此处:
http://martinfowler.com/eaaDev/EventAggregator.html
然后,您可以使用其他代码通过事件聚合器监听节点更改点击并相应地进行响应。这将使您的代码分离并使其更易于测试。
答案 1 :(得分:0)
假设您使用的是mvvm? 如果没有阅读它 - 将使它更容易。
然后你的表格上有树视图,绑定到视图模型上的itemsource。 通常,像树视图一样的项目控件将在其上具有selecteditem属性。 将它绑定到viewmodel上的属性,该属性是树视图中包含的对象类型。将其称为例如CurrentlySelectedItem。
您的详细信息'表单'可以是控件,也可以是同一表单上的任何内容。 现在,根据您的对象的完整程度 - 您至少有两个选项。如果树视图中的对象具有您需要的所有数据,则只需将详细信息绑定到CurrentlySelectedItem。
显然它必须实现INotifyPropertyChanged来告诉绑定系统更新值。
如果对象没有足够的信息,那么在CurrentlySelectedItem的setter上,您可以触发一个方法来加载整个对象,然后将细节绑定到该完整对象。
Alternativley,另一种流行的方法,您可以将详细信息表单作为自包含控件来订阅消息,当它使用treeview对象的键接收消息时,它会加载所需的信息。