我正在尝试制作一个wpf桌面应用程序。我想制作一个分成两半的窗口。左侧应包含列表(如导航),右侧应包含页面。每次我点击列表中的项目,我都想加载一个新页面。该页面包含TreeView
。目前我有一个类TreeViewData
,其中包含TreeView的数据。这些存储在List
中。在我的Main
我做
foreach(var t in TreeViewDataList)
{
TreeViewDataWindow w2 = new TreeViewDataWindow(t);
w2.Show();
}
显示TreeViews。但是有20个打开的窗户真的是用户不友好。有人能给我一个如何实现这种行为的提示吗?
答案 0 :(得分:1)
我猜你定义了ViewModel和Views,所以我提出了解决方案,而不是TreeView我使用ListBox, 在MainWindow,
<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
{
}