我有一个带有四个按钮的窗口,用于添加,搜索,删除和更新数据库查询。
单击其中一个按钮后,我打开一个新窗口,其中包含针对这些功能的特定WPF控件。
如何在不打开新窗口的情况下执行此操作?一切都应该在一个窗口中发生,只有WPF控件应该更改,并且代码背后。单击“返回”或“执行”后,我想返回主窗口。
答案 0 :(得分:6)
关键是ContentControl - 您将更改其内容:
<ContentControl Content="{Binding WhatToShow}"/>
在您的视图模型中,您将拥有属性object WhatToShow
。
if(some_condition)
WhatToShow = new SomeView(someViewModel);
else
WhatToShow = new AnotherView(anotherViewModel);
或者您可以查看Caliburn.Micro,这是一个使屏幕导航更容易的MVVM框架。
答案 1 :(得分:1)
我会重新考虑下一个方法:
准备聚合所有切换视图模型的主视图模型,例如
public class MainViewModel : INotifyPropertyChanged
{
private ViewModel1 _viewModel1 = new ViewModel1();
private ViewModel2 _viewModel2 = new ViewModel2();
private INotifyPropertyChanged _currentViewModel;
public INotifyPropertyChanged CurrentViewModel
{
get { return _currentViewModel; }
set
{
_currentViewModel = value;
RaisePropertyChanged(() => CurrentViewModel);
}
}
public IEnumerable<INotifyPropertyChanged> ViewModelsToSwitch
{
get
{
return new INotifyPropertyChanged[]
{
_viewModel1,
_viewModel2
};
}
}
// INotifyPropertyChanged implementation
}
将MainViewModel绑定到TabControl:
<Window x:Class="SwitchViewDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TabControl ItemsSource="{Binding ViewModelsToSwitch}" SelectedItem="{Binding CurrentViewModel}"/> </Grid> </Window>
6。声明每个视图模型的视图:
<Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <DataTemplate DataType="{x:Type ViewModel1}"> <TextBlock Text="View 1"/> </DataTemplate> <DataTemplate DataType="{x:Type ViewModel2}"> <TextBlock Text="View 2"/> </DataTemplate> </Window.Resources> <Grid> <TabControl ItemsSource="{Binding ViewModelsToSwitch}" SelectedItem="{Binding CurrentViewModel}"/> </Grid> </Window>
7。在MainViewModel中设置CurrentViewModel到ViewModel1或ViewModel2并将显示与此视图模型视图关联。
<强>优点:强>
答案 2 :(得分:0)
而不是Window,为每个操作创建一个网格。并在该网格内放置其特定控件。将所有网格的可见性设置为Visibility.Collapsed。当有人按下其中一个按钮时,将相关网格的Visibility设置为Visibility.Visible,将另一个设置为折叠。 话虽如此,使用UserControls更加有条理,UserControls非常易于使用。只需在那里添加您的XAML并将其包含在主窗口中。然后像我之前所说的那样隐藏和展示。