C# MVVM侧边导航栏TreeView代码
时间: 2024-03-09 22:06:54 浏览: 34
以下是一个简单的C# MVVM侧边导航栏TreeView的示例代码:
View:
```xaml
<TreeView ItemsSource="{Binding MenuItems}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubMenuItems}">
<TextBlock Text="{Binding Title}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding NavigationCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>
```
ViewModel:
```csharp
public class MainViewModel : ViewModelBase
{
public ObservableCollection<MenuItemViewModel> MenuItems { get; set; }
public ICommand NavigationCommand { get; set; }
public MainViewModel()
{
MenuItems = new ObservableCollection<MenuItemViewModel>
{
new MenuItemViewModel { Title = "Menu Item 1", SubMenuItems = new ObservableCollection<MenuItemViewModel> { new MenuItemViewModel { Title = "Submenu Item 1" }, new MenuItemViewModel { Title = "Submenu Item 2" } } },
new MenuItemViewModel { Title = "Menu Item 2" }
};
NavigationCommand = new RelayCommand(Navigate);
}
private void Navigate()
{
// Update main content based on selected menu item
}
}
public class MenuItemViewModel : ViewModelBase
{
public string Title { get; set; }
public ObservableCollection<MenuItemViewModel> SubMenuItems { get; set; }
private bool _isExpanded;
public bool IsExpanded
{
get { return _isExpanded; }
set { SetProperty(ref _isExpanded, value); }
}
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set { SetProperty(ref _isSelected, value); }
}
}
```
在这个示例中,MenuItemViewModel表示一个菜单项,它包含一个标题和一个子菜单项的集合。MainViewModel包含一个ObservableCollection,其中包含所有菜单项,并且具有一个NavigationCommand来处理选定的菜单项。在View中,使用HierarchicalDataTemplate嵌套TreeViewItem,以便可以显示子菜单项。使用Interaction.Triggers将SelectedItemChanged事件绑定到NavigationCommand。