我想我可能在这里做了一些完全错误的事情,所以希望你们能纠正我。
我想使用按钮切换视图(在窗口内切换UserControls),然后让另一个View能够有一个切换回第一个视图的按钮(如后退按钮)。我已经找到了如何使用Google做到这一点,但我遇到的问题是我的第一个View的DataContext绑定到一个ViewModel而切换视图的代码是另一个,所以我似乎无法绑定第一个视图中的按钮将其命令绑定到另一个ViewModel。这就是我的意思(简化):
FirstView.xaml.cs:
private readonly FirstViewModel viewModel = new FirstViewModel();
public AirplanesStatusView()
{
InitializeComponent();
DataContext = viewModel; //Bound to this viewModel for other reasons
}
FirstView.xaml:
<UserControl>
<Grid>
<Button Command="{Binding GotoSecondViewCommand}}" //This Command is in other MainWindowViewModel
</Grid>
</UserControl>
MainWindow.xaml.cs:
private readonly MainWindowViewModel mainWindowViewModel = new MainWindowViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = mainWindowViewModel;
}
那么从我在谷歌上发现的情况来看,这就是它接近切换视图的方式: MainWindow.xaml:
<Window>
<Window.Resources>
<DataTemplate DataType="{x:Type local:FirstViewModel}">
<local:FirstView/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:SecondViewModel}">
<local:SecondView/>
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding CurrentView}" />
</Window>
MainWindowViewModel.cs:
private ICommand _gotoFirstViewCommand;
private ICommand _gotoSecondViewCommand;
private object _currentView;
public ICommand GotoFirstViewCommand{ //stuff }
public ICommand GotoSecondViewCommand{ //stuff }
public object CurrentView
{
get { return _currentView; }
set
{
_currentView = value;
OnPropertyChanged("CurrentView");
}
}
问题是当我运行程序时,在输出中它显示“System.Windows.Data Error:40:BindingExpression path error:'GotoSecondViewCommand'属性找不到'object'''FirstViewModel',所以Button可以甚至找不到命令。我很确定我做的事情完全错了,因为我对WPF和MVVM模式都很陌生。非常感谢帮助和纠正。
答案 0 :(得分:0)
您将错误的ViewModel绑定为DataContext。根据你的结构,你需要做...
另一种方法是如果你想在MainViewModel中接受命令
答案 1 :(得分:0)
试试这个:
<Button Command="{Binding DataContext.GotoSecondViewCommand, RelativeSource={RelativeSource AncestorType=Window}}"/>
它绑定到父窗口的DataContext
,即定义MainWindowViewModel
的{{1}}。