Wpf 如何使用MVVM灯光在ViewModel之间传递变量?

Wpf 如何使用MVVM灯光在ViewModel之间传递变量?,wpf,mvvm,mvvm-light,Wpf,Mvvm,Mvvm Light,我有两个视图,第一个视图包含用户列表,第二个视图可以编辑用户,我只想在每个屏幕的两个视图模型之间传递Id,因为我可以知道要修改的用户。我是一个使用MVVM Light框架的初学者,有谁能给我最好的解决方案吗 首先将变量包装在类中 public class VariableMessage { public string YourVariable { get; set; } } 然后在接收视图模型初始值设定项中接收消息寄存器 Messenger.Default.Registe

我有两个视图,第一个视图包含用户列表,第二个视图可以编辑用户,我只想在每个屏幕的两个视图模型之间传递Id,因为我可以知道要修改的用户。我是一个使用MVVM Light框架的初学者,有谁能给我最好的解决方案吗

首先将变量包装在类中

 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.Register
(
这
(操作)=>ReceiveVariableMessage(操作)
);
私有对象接收VariableMessage(VariableMessage VariableMessage)
{
Console.WriteLine(variableMessage.YourVariable);
返回null;
}
发信

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

首先将变量包装在类中

 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.Register
(
这
(操作)=>ReceiveVariableMessage(操作)
);
私有对象接收VariableMessage(VariableMessage VariableMessage)
{
Console.WriteLine(variableMessage.YourVariable);
返回null;
}
发信

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

首先将变量包装在类中

 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.Register
(
这
(操作)=>ReceiveVariableMessage(操作)
);
私有对象接收VariableMessage(VariableMessage VariableMessage)
{
Console.WriteLine(variableMessage.YourVariable);
返回null;
}
发信

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

首先将变量包装在类中

 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.Register
(
这
(操作)=>ReceiveVariableMessage(操作)
);
私有对象接收VariableMessage(VariableMessage VariableMessage)
{
Console.WriteLine(variableMessage.YourVariable);
返回null;
}
发信

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

我建议使用“编辑用户”按钮/操作传递id,然后在目标viewmodel的构造函数中使用id,而不是使用messenger(使用messenger通常会弄乱代码)

视图中的按钮:

<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
}
public ICommand editButton命令=new RelayCommand(使用editButton)
专用异步void UseEditButton(对象obj)
{
YourModel id=obj作为YourModel;
YourEditViewModel viewModel=新建YourEditViewModel(id)
//导航到虚拟机
}

我建议使用“编辑用户”按钮/操作传递id,然后在目标viewmodel的构造函数中使用id,而不是使用messenger(使用messenger通常会弄乱代码)

视图中的按钮:

<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
}
public ICommand editButton命令=new RelayCommand(使用editButton)
专用异步void UseEditButton(对象obj)
{
YourModel id=obj作为YourModel;
YourEditViewModel viewModel=新建YourEditViewModel(id)
//导航到虚拟机
}

我建议使用“编辑用户”按钮/操作传递id,然后在目标viewmodel的构造函数中使用id,而不是使用messenger(使用messenger通常会弄乱代码)

视图中的按钮:

<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
}
public ICommand editButton命令=new RelayCommand(使用editButton)
专用异步void UseEditButton(对象obj)
{
YourModel id=obj作为YourModel;
YourEditViewModel viewModel=新建YourEditViewModel(id)
//导航到虚拟机
}

我建议使用“编辑用户”按钮/操作传递id,然后在目标viewmodel的构造函数中使用id,而不是使用messenger(使用messenger通常会弄乱代码)

视图中的按钮:

<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
}
public ICommand editButton命令=new RelayCommand(使用editButton)
专用异步void UseEditButton(对象obj)
{
YourModel id=obj作为YourModel;
YourEditViewModel viewModel=新建YourEditViewModel(id)
//导航到虚拟机
}

您能进一步解释一下如何进行导航吗?谢谢你能进一步解释你将如何进行导航吗?谢谢你能进一步解释你将如何进行导航吗?谢谢你能进一步解释你将如何进行导航吗?谢谢,谢谢!又短又甜!谢谢又短又甜!谢谢又短又甜!谢谢又短又甜!