【发布时间】:2009-12-01 14:50:07
【问题描述】:
我正在尝试生成用于在网络上浏览的服务器列表,以便生成如下所示的树形视图:
-Local Server
- Endpoint 1
- Endpoint 2
-Remote
- <Double-click to add a server...>
- Remote Server 1
- Endpoint 1
- Endpoint 2
- Remote Server 2
- Endpoint 1
- Endpoint 2
我的 ViewModel 如下所示:
...
public Server LocalServer;
public ObservableCollection<Server> RemoteServers;
...
那么,如何在 xaml 中构造列表并绑定到单个对象和对象列表?我的想法可能完全错误,但我的大脑真正想做的事情是这样的:
<CompositeCollection>
<SingleElement Content="{Binding LocalServer}">
<!-- ^^ something along the lines of a ContentPresenter -->
<TreeViewItem Header="Remote">
<TreeViewItem.ItemsSource>
<CompositeCollection>
<TreeViewItem Header="<Click to add...>" />
<CollectionContainer Collection="{Binding RemoteServers}" />
</CompositeCollection>
</TreeViewItem.ItemsSource>
</TreeViewItem>
</CompositeCollection>
我觉得我必须缺少一个基本元素,这使我无法在这里指定我想要的东西。该单项有子项。我确实尝试过使用 ContentPresenter,但无论出于何种原因,即使它选择了 HierarchicalDataTemplate 以正确显示标题,它也无法展开。
更新
所以现在,我在视图模型上公开了一个属性,该属性将单个元素包装在一个集合中,以便CollectionContainer 可以绑定到它。不过,我真的很想听听人们对如何做到这一点的想法。这似乎非常基础。
【问题讨论】:
-
在找到这个 SO 问题之前,我也试图弄清楚这一点,并最终做了同样的事情。在我的视图模型中添加了一个集合属性。