![](/img/trans.png)
[英]MVVM Light & WPF - Binding Multiple instances of a Window to a ViewModel
[英]WPF ContentControl with ViewModel Binding won't change (MVVM Light)
我目前正在嘗試通過MVVM Light Toolkit(還使用Locator和SimpleIoC)在Messenger中使用WPF應用程序進行導航。
我的MainWindow有一個帶有簡單Binding。的ContentControl。
<ContentControl Content="{Binding CurrentPageViewModel}"/>
..在MainViewModel中與Messenger
private ViewModelBase _currentPageViewModel;
private readonly LoginViewModel _loginViewModel;
private readonly RegisterViewModel _registerViewModel;
public MainViewModel()
{
RegisterMessenger();
_loginViewModel = new LoginViewModel();
_registerViewModel = new RegisterViewModel();
_currentPageViewModel = _loginViewModel;
}
public ViewModelBase CurrentPageViewModel
{
get { return _currentPageViewModel; }
set { Set(ref _currentPageViewModel, value); }
}
public void RegisterMessenger()
{
Messenger.Default.Register<NotificationMessage>(this, (message) =>
{
MessageBox.Show(message.Notification);
// Checks the actual content of the message.
switch (message.Notification)
{
case "GoToLoginPage":
_currentPageViewModel = _loginViewModel;
break;
case "GoToRegisterPage":
_currentPageViewModel = _registerViewModel;
break;
}
});
}
例如,我用ICommand綁定了一個按鈕,該命令向Messenger發送一個String來切換CurrentPageViewModel。
Messenger.Default.Send(new NotificationMessage("GoToRegisterPage"));
為了確定應該顯示哪個視圖,我在App.xml中將它們設置如下。
<DataTemplate DataType="{x:Type vm:LoginViewModel}">
<view:LoginView />
</DataTemplate>
是的,我也使用RegisterViewModel做到了這一點。但是,當單擊Button時,它將通過SwitchCase設置_currentPageViewModel,但是ContentControl不會更新View。
我發現沒有什么可以幫助的(主要是因為愚蠢,對吧?)。 我想念什么或做錯什么?
謝謝!
如果要設置視圖模型,請使用屬性,否則不調用NotifyPropertyChanged,並且WPF不會更改任何內容。
public void RegisterMessenger()
{
Messenger.Default.Register<NotificationMessage>(this, (message) =>
{
MessageBox.Show(message.Notification);
// Checks the actual content of the message.
switch (message.Notification)
{
case "GoToLoginPage":
CurrentPageViewModel= _loginViewModel;
break;
case "GoToRegisterPage":
CurrentPageViewModel= _registerViewModel;
break;
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.