2016-12-16 65 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