WPF MVVM模式下 实现TreeView控件绑定Command,并且传递当前选择TreeViewItem
时间: 2024-12-14 13:20:01 浏览: 10
在WPF MVVM设计模式下,为了实现TreeView控件的绑定,并传递当前选中的TreeViewItem,通常你会采用以下几个步骤:
1. **ViewModel**: 创建一个ViewModel类,这里可以有一个`ICollectionView`或者`ObservableCollection`来存储数据,并且包含一个`ICommand`类型的成员,如`ICollectionView`的SelectionChanged事件处理器,用于处理TreeView的选中操作。
```csharp
public class TreeViewModel : INotifyPropertyChanged
{
public ObservableCollection<TreeViewItemData> Items { get; set; }
public ICommand SelectedItemCommand { get; set; }
public TreeViewModel()
{
Items = new ObservableCollection<TreeViewItemData>();
SelectedItemCommand = new RelayCommand(() => OnItemSelected());
}
private void OnItemSelected()
{
if (Items != null && Items.Count > 0)
{
var selectedItem = Items[Items.IndexOf(SelectedItemProperty)];
// 这里可以对selectedItem做进一步的操作
}
}
public TreeViewItemData SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
// ...其他INotifyPropertyChanged所需方法...
}
```
2. **XAML**:
```xml
<TreeView ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding DataContext.SelectedItemCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
```
在这个XAML部分,当TreeViewItem被选中时,`InvokeCommandAction`会自动调用`SelectedItemCommand`,并将当前选中的`TreeViewItem`作为参数传入。
阅读全文