0

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

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

感谢您的帮助!科里。

4

2 回答 2

0

使用事件聚合器设计模式,请参阅此处了解详细信息:

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

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

于 2012-11-30T17:09:51.660 回答
0

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

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

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

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

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

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

于 2012-11-30T17:25:45.190 回答