ViewModel属性处理

时间:2014-10-23 09:02:06

标签: wpf mvvm binding mvvm-light

关于我基于MVVM的WPF应用程序的几句话。我已经定义了MainWindowViewModel:

public class MainWindowViewModel : ViewModelBase
{
     ...
     public ViewModelBase CurrentViewModel {get; set;}
     ...
}

这是我的MainWindow.xaml的数据上下文。此属性具有绑定到特定View的自己的模板(取决于当前包含的“内部”视图模型)。此MainWindowViewModel正在侦听更改当前视图模型的Mvvm-Light Messenger消息。现在我的问题。

我想在那里使用属性SelectedUser分配LoginViewModel。我从另一个ViewModel获取SelectedUser的属性,我正在执行此命令:

this.UserSelectedCommand = new RelayCommand(() =>
        {
            LoginViewModel viewModel = new LoginViewModel();
            viewModel.SelectedLogin = this.SelectedUserFromList;

            MessageHelper.SendViewModel(viewModel); //change CurrentViewModel
            viewModel.RaisePropertyChanged("SelectedLogin");
        });

我的LoginViewModel.cs在构造函数中定义了SelectedLogin的默认值。

所以在ViewModel中负责显示我正在选择的用户列表,我在SelectedUserFromList属性中有这个值,我想回到使用所选用户登录View。这意味着我想将具有SelectedLogin的新LoginViewModel分配给CurrentViewModel属性表单MainWindowViewModel。

执行UserSelectedCommand后,我可以看到绑定到LoginViewModel的正确View,但我有属性的默认值。

我想是因为这个

<DataTemplate DataType="{x:Type vm:LoginViewModel}">
    <views:LoginView/>
</DataTemplate>

我在CurrentViewModel中有正确的ViewModel(更改了SelectedLogin),但模板再次加载LoginViewModel(因此构造函数设置默认值)。我对吗?因为我看不出任何其他原因。

修改

好的,现在我确定DataTemplate正在创建LoginViewModel的新实例(这个实例具有默认值)。但现在呢?我用Singleton修复它,但我不确定这是不是很好的解决方案。

0 个答案:

没有答案
相关问题