切换用户对树视图选择更改的控制

本文关键字:控制 选择 视图 用户 | 更新日期: 2023-09-27 17:54:11

如何根据树视图选择更改切换用户控件。我已经在ListBox上实现了这一点,但不知道如何用Wpf Treeview做到这一点。这是我的XAML代码。

<Window x:Class="MainScreen"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:viewModelSettings="clr-namespace:ViewModel.Settings" >
 <Window.Resources>
    <DataTemplate DataType="{x:Type viewModelSettings:BasicSettingsViewModel}">
        <viewSettings:BasicSettingsView/>
    </DataTemplate>
     <DataTemplate DataType="{x:Type viewModelSettings:AdvancedSettingsViewModel}">
        <viewSettings:AdvancedSettingsView/>
    </DataTemplate>
 </Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="3*"/>
    </Grid.ColumnDefinitions>
    <ListBox x:Name="ListBoxMenu"                    
             Grid.Column="0" Margin="5,5,5,385"
             ItemsSource="{Binding Settings}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" Padding="10"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
   <Border Grid.Column="1" Margin="5">
        <ContentControl Content="{Binding ElementName=ListBoxMenu, Path=SelectedItem}"/>
   </Border>
</Grid>
</Window>

我正在使用数据模板来定义各种视图模型和与它们绑定的视图

使它完全MVVM,这是我的代码后面

 public partial class MainScreen : Window
  {
     public MainScreen()
     {
         InitializeComponent();
         DataContext = new OptionsDialogViewModel();
     }
 }
//OptionsDialogViewModel Class
 public class OptionsDialogViewModel : ViewModelBase
 {
    private readonly ObservableCollection<SettingsViewModelBase> _settings;
    public ObservableCollection<SettingsViewModelBase> Settings
    {
        get { return this._settings; }
    }
    public OptionsDialogViewModel ()
    {
        _settings = new ObservableCollection<SettingsViewModelBase>();
        _settings.Add(new BasicSettingsViewModel());
        _settings.Add(new AdvancedSettingsViewModel());
    }
}

//setingsviewmodelbase类

public abstract class SettingsViewModelBase : ViewModelBase
{
    public abstract string Name { get; }
}

和现在我的ViewModel(s)是从这个SettingsViewModelBase

派生的
public class AdvancedSettingsViewModel : SettingsViewModelBase
{
    public override string Name
    {
        get { return "Advanced"; }
    }
}

我现在有两个问题,这是做这项任务的正确方法吗?如何将列表视图切换到树视图

切换用户对树视图选择更改的控制

不幸的是,在树视图中选择项目并不像在列表框中选择项目那么简单。

与使用Content="{Binding ElementName=ListBoxMenu, Path=SelectedItem}"简单地绑定到ListBox不同,绑定到树视图项涉及到一些代码隐藏。查看这里和这里的SO线程,了解更多关于how's和why's的讨论。