[SilverLight]MVVM下绑定TreeView
2013-01-07 11:03
120 查看
文章使用的是MVVMLight框架,下载地址:http://mvvmlight.codeplex.com/
首先要对TreeView进行扩展,使得它能够有Command,里面需要用到Prism,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=28950
参考文章:http://www.silverlightshow.net/items/Make-the-TreeView-control-to-be-MVVM-compliant.aspx
需要先添加引用:
View代码:
然后新增一个View用来存储TreeView的数据:
View Code
先加载父级节点,对于每个节点添加loading子节点,那样展开节点时就会先显示loading节点,当获取到数据时再加载数据:
展开节点时获取子节点,当然不能忘记先要把loading节点给删掉,先在ViewModel中定义RelayCommand:
展开事件:
首先要对TreeView进行扩展,使得它能够有Command,里面需要用到Prism,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=28950
参考文章:http://www.silverlightshow.net/items/Make-the-TreeView-control-to-be-MVVM-compliant.aspx
需要先添加引用:
xmlns:tree="clr-namespace:[your namespace]"
View代码:
<tree:TreeViewWithCommand ItemsSource="{Binding Root,Mode=TwoWay}" tree:ItemExpanded.Command="{Binding ItemExpanded}" tree:SelectedItemChanged.Command="{Binding ItemSelected}"> <tree:TreeViewWithCommand.ItemTemplate> <c:HierarchicalDataTemplate ItemsSource="{Binding Children,Mode=TwoWay}" > <TextBlock Text="{Binding Current. Value,Mode=TwoWay}"></TextBlock> </c:HierarchicalDataTemplate> </tree:TreeViewWithCommand.ItemTemplate> </tree:TreeViewWithCommand>
然后新增一个View用来存储TreeView的数据:
View Code
private ObservableCollection<Tree<Product>> _root; public ObservableCollection<Tree<Product>> Root { get { return _root; } private set { if (!ReferenceEquals(_root, value)) { _root = value; RaisePropertyChanged("Root"); } } }
先加载父级节点,对于每个节点添加loading子节点,那样展开节点时就会先显示loading节点,当获取到数据时再加载数据:
private void LoadData() { this.Root = new ObservableCollection<Tree<Product>>(); Root.Add(new Tree<Product>(BuildLoadingChild())); lstProduct = 获取数据; this.Root.Clear(); foreach (Product item in lstProduct ) { Root.Add(new Tree<Product>(item, BuildLoadingChild())); } } private Product BuildLoadingChild() { return new Product() { ProductId = -999, ProductName = "loading" }; }
展开节点时获取子节点,当然不能忘记先要把loading节点给删掉,先在ViewModel中定义RelayCommand:
private RelayCommand<Tree<Product>> _itemExpanded; public RelayCommand<Tree<Product>> ItemExpanded { get { if (_itemExpanded == null) { _itemExpanded = new RelayCommand<Tree<Product>>(o => this.OnItemExpanded(o)); } return _itemExpanded; } }
展开事件:
private void OnItemExpanded(Tree<Product> item) { var lstChildren = 获取数据; if (lstChildren == null || lstChildren.Count <= 0) { item.Children.Clear(); return; } item.Children.Clear(); foreach (Product i in lstChildren) { item.Children.Add(new Tree<Product>(i, BuildLoadingChild())); } }
相关文章推荐
- Silverlight TreeView MVVM 绑定实现
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- MVVM绑定多层级数据到TreeView并设置项目展开
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式
- 稳扎稳打Silverlight(52) - 4.0绑定之 ICommand 命令和 MVVM 模式