如何使用MVVM Light在ViewModel之间传递变量?

时间:2015-09-22 15:43:19

标签: wpf mvvm mvvm-light

我有2个视图,第一个包含用户列表,第二个包含我可以编辑用户的所有内容,我想要的是在每个屏幕的2个ViewModel之间传递Id,我可以知道将是的用户改性。我是一名使用MVVM Light Framework的初学者,任何人都能为我提供最佳解决方案吗?

2 个答案:

答案 0 :(得分:3)

首先将变量包装在类中。

 public class VariableMessage
 {
       public string YourVariable { get; set; }
 }

然后在接收视图模型初始化程序中接收消息寄存器。

 Messenger.Default.Register<VariableMessage>
           (
                this,
                (action) => ReceiveVariableMessage(action)
           );

 private object ReceiveVariableMessage(VariableMessage variableMessage)
 {
      Console.WriteLine(variableMessage.YourVariable);
      return null;
 }

发送消息

 Messenger.Default.Send<VariableMessage>(new VariableMessage() { YourVariable = "Hello"});

答案 1 :(得分:0)

我建议不要使用信使(使用信使经常会弄乱你的代码),而是建议用#&#34;编辑用户&#34;按钮/操作,然后在目标viewmodel的构造函数中使用id。

视图中的按钮:

<Button Content="Edit" 
Command="{Binding DataContext.EditButtonCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" 
CommandParameter="{Binding }" />

在你的viewmodel中:

public ICommand EditButtonCommand= new RelayCommand<object>(UseEditButton)

private async void UseEditButton(object obj)
{
        YourModel id = obj as YourModel;
    YourEditViewModel viewModel = new YourEditViewModel(id) 
    //navigate to vm
}