2016-12-16 71 views
1

我试图制作一个wpf桌面应用程序。我想制作一个分成两半的窗户。左侧应包含一个列表(如导航)和右侧的一个页面。每次点击列表中的一个项目,我想加载一个新页面。该页面包含TreeView。目前我有一个类TreeViewData,其中包含TreeView的数据。那些存储在List。并在我的Main我做从列表中生成导航以生成页面

foreach(var t in TreeViewDataList) 
{ 
    TreeViewDataWindow w2 = new TreeViewDataWindow(t); 
    w2.Show(); 
} 

来显示树视图。但有20个打开的窗口真的是用户不友好的。有人能给我一个提示,我如何能够实现这种行为?

回答

1

我猜你有的ViewModels和视图定义,所以我提出的解决方案,而不是TreeView控件我使用列表框, 在主窗口,

<Grid> 
     <Grid.Resources> 
      <DataTemplate DataType="{x:Type my:AdvancedViewModel}"> 
       <view:AdvancedView/> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type my:RegularViewModel}"> 
       <view:RegularView/> 
      </DataTemplate> 
     </Grid.Resources> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <ListBox ItemsSource="{Binding ViewModels}" SelectedItem="{Binding SelectedViewModel}" Grid.Column="0"/> 
     <ContentControl Content="{Binding SelectedViewModel}" Grid.Column="1"/> 
    </Grid> 

在这里,我使用的一些看法和视图模型例如目的,

您的看法, 首先查看

<UserControl x:Class="WpfApplication5.RegularView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WpfApplication5" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid> 
    <TextBlock Text="Fom Regular"/> 
</Grid> 

第二种观点

<UserControl x:Class="WpfApplication5.AdvancedView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WpfApplication5" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Grid> 
    <TextBlock Text="From Advanced"/> 
</Grid> 

,你MainViewModel只能是这样,

public class MainViewModel 
{ 
    private ObservableCollection<ViewModelBase> viewModels; 

    public ObservableCollection<ViewModelBase> ViewModels 
    { 
     get { return viewModels; } 
     set { viewModels = value; } 
    } 

    private ViewModelBase selectedViewModel; 

    public ViewModelBase SelectedViewModel 
    { 
     get { return selectedViewModel; } 
     set { selectedViewModel = value; } 
    } 
    public MainViewModel() 
    { 
     ViewModels = new ObservableCollection<ViewModelBase>(); 
     ViewModels.Add(new RegularViewModel()); 
     ViewModels.Add(new AdvancedViewModel()); 
     SelectedViewModel = ViewModels[0]; 
    } 

} 

public class ViewModelBase 
{ 
} 
public class RegularViewModel : ViewModelBase 
{ 

} 
public class AdvancedViewModel : ViewModelBase 
{ 

} 
+1

谢谢你的快速响应。好吧,你创建一个新的用户控件,而不是一个页面。这不是我正在寻找的,但我现在就试一试。 – Kleisophabo

+1

这是一个概念,你可以试试你想要的控件。 – WPFUser

+2

现在我没有理解这个概念!以及我正在寻找的。谢谢你的回答:D。我对常规观点和高级观点感到困惑。我现在完成了作业。 :) – Kleisophabo