【发布时间】:2015-02-19 01:18:04
【问题描述】:
我目前正在自己做一个小项目,以更好地学习 WPF,我问自己的一个问题是,如果我想遵循 MVVM 模式,不同视图之间的导航将如何工作。
我偶然发现了this question here answering my question,但不幸的是它似乎不起作用。不是显示我的视图,而是仅显示关联视图模型的命名空间。因此,例如,我看到的不是我的 LoginView,而是一个写有“JollyFinance.ViewModels.LoginViewModel”的白屏。
这是我的 MainWindow.xaml 代码:
<Window.Resources>
<!-- Different pages -->
<DataTemplate x:Key="LoginView" DataType="vm:LoginViewModel">
<views:LoginView />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding CurrentViewModel}"/>
</Grid>
这是我的 MainViewModel.cs:
public class MainViewModel : BindableObject
{
private ViewModelNavigationBase _currentViewModel;
public MainViewModel()
{
CurrentViewModel = new LoginViewModel();
}
public ViewModelNavigationBase CurrentViewModel
{
get { return _currentViewModel; }
set
{
if (_currentViewModel != value)
{
_currentViewModel = value;
RaisePropertyChanged();
}
}
}
}
我的 LoginViewModel.cs 文件:
public LoginViewModel()
{
LoginCommand = new RelayCommand(Login);
NavigateCommand = new RelayCommand(Login);
}
private void Login(object param)
{
Popup codePopup = new Popup();
TextBlock popupText = new TextBlock();
popupText.Text = "Test";
popupText.Background = Brushes.LightBlue;
popupText.Foreground = Brushes.Blue;
codePopup.Child = popupText;
}
public String Username { get; set; }
public String Password { get; set; }
public ICommand LoginCommand { get; set; }
}
我的 LoginView.xaml 文件是一个 UserControl,由几个 Buttons 和 TextBlocks 组成。 BindableObject 只是我使用的一个抽象类,它实现了INotifyProperty 接口。 ViewModelNavigationBase 是我所有的视图模型都将继承的类;它暂时不包含任何内容。
我将如何解决此问题以显示我的视图而不是关联视图模型的字符串表示形式?
【问题讨论】:
标签: c# wpf xaml mvvm navigation