Moj*_*ter 6 wpf treeview xaml mvvm
我正在尝试生成一个服务器列表,以便在网络上进行浏览,从而生成一个如下所示的树视图:
-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
Run Code Online (Sandbox Code Playgroud)
我的ViewModel看起来像这样:
...
public Server LocalServer;
public ObservableCollection<Server> RemoteServers;
...
Run Code Online (Sandbox Code Playgroud)
那么,如何通过绑定到单个对象和对象列表来构建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>
Run Code Online (Sandbox Code Playgroud)
我觉得必须有一个我缺少的基本元素,这使我无法在这里指定我想要的东西.那个单品有孩子.我确实尝试使用ContentPresenter,但无论出于何种原因,它都无法扩展,即使它选择了HierarchicalDataTemplate
正确显示标题.
更新
所以现在,我已经在视图模型上公开了一个属性,该属性将单个元素包装在一个集合中,以便CollectionContainer
可以绑定它.不过,我真的很想听听人们如何做到这一点的想法.这似乎非常重要.
我发布了一个与您的关于 CompositeCollections 非常相似的问题:Why is CompositeCollection not Freezable?
不管你信不信,这显然是 WPF 中的一个错误。这是微软员工承认的帖子:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b15cbd9d-95aa-47c6-8068-7ae9f7dca88a
CompositeCollection 不可冻结,但应该可以。这使得将非静态元素组合到一个集合中变得困难。这是很多事情的常见场景。例如,填充有其他数据绑定对象的组合框顶部的“选择一个”元素会很好,但您不能以声明方式执行此操作。
不管怎样,很抱歉这不是一个答案,但希望它能帮助您了解为什么这没有按照您想象的方式工作。
归档时间: |
|
查看次数: |
4442 次 |
最近记录: |