在树视图选择更改

时间:2015-06-08 16:26:23

标签: c# wpf xaml mvvm treeview

如何根据树视图选择更改切换用户控件。我在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());
    }
}

// SettingsViewModelBase类

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

现在我的ViewModel派生自此SettingsViewModelBase

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

我现在有2个问题,这是完成此任务的正确方法吗? 如何将列表视图切换到treeview

1 个答案:

答案 0 :(得分:0)

不幸的是,选择具有树视图的项目并不像使用ListBox选择那样简单。

与简单地使用<?php if (is_home()): ?> <!-- ... --> <?php endif; ?> 绑定到ListBox不同,绑定到treeview项涉及一些代码隐藏。查看SO主题herehere,了解有关如何以及原因的更多讨论。