【发布时间】:2015-12-19 16:31:16
【问题描述】:
我有 2 个视图,第一个包含用户列表,第二个包含用户列表,我可以在其中编辑用户,我想要的只是在每个屏幕的 2 个 ViewModel 之间传递 Id,因为我可以知道将成为的用户修改的。我是使用 MVVM Light Framework 的初学者,谁能给我这个案例的最佳解决方案?
【问题讨论】:
标签: wpf mvvm mvvm-light
我有 2 个视图,第一个包含用户列表,第二个包含用户列表,我可以在其中编辑用户,我想要的只是在每个屏幕的 2 个 ViewModel 之间传递 Id,因为我可以知道将成为的用户修改的。我是使用 MVVM Light Framework 的初学者,谁能给我这个案例的最佳解决方案?
【问题讨论】:
标签: wpf mvvm 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.Send<VariableMessage>(new VariableMessage() { YourVariable = "Hello"});
【讨论】:
我建议不要使用 messenger(使用 messenger 往往会弄乱您的代码),而是通过“编辑用户”按钮/操作传递 id,然后在目标视图模型的构造函数中使用 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
}
【讨论】: