如何使用 MVVM Light 在 ViewModel 之间传递变量?
How can I pass a variable between ViewModel using MVVM Light?
我有 2 个视图,第一个包含用户列表,第二个包含我可以编辑用户的视图,我想要的只是在每个屏幕的 2 个 ViewModel 之间传递 Id,因为我可以知道用户将被修改。我是使用 MVVM Light Framework 的初学者,任何人都可以为我提供针对这种情况的最佳解决方案吗?
首先将变量包装在 class.
中
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"});
我建议使用 "Edit User" button/action 传递 id,然后在你的目标视图模型。
您认为的按钮:
<Button Content="Edit"
Command="{Binding DataContext.EditButtonCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding }" />
在您的视图模型中:
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
}
我有 2 个视图,第一个包含用户列表,第二个包含我可以编辑用户的视图,我想要的只是在每个屏幕的 2 个 ViewModel 之间传递 Id,因为我可以知道用户将被修改。我是使用 MVVM Light Framework 的初学者,任何人都可以为我提供针对这种情况的最佳解决方案吗?
首先将变量包装在 class.
中 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"});
我建议使用 "Edit User" button/action 传递 id,然后在你的目标视图模型。
您认为的按钮:
<Button Content="Edit"
Command="{Binding DataContext.EditButtonCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
CommandParameter="{Binding }" />
在您的视图模型中:
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
}