【问题标题】:How can I pass a variable between ViewModel using MVVM Light?如何使用 MVVM Light 在 ViewModel 之间传递变量?
【发布时间】:2015-12-19 16:31:16
【问题描述】:

我有 2 个视图,第一个包含用户列表,第二个包含用户列表,我可以在其中编辑用户,我想要的只是在每个屏幕的 2 个 ViewModel 之间传递 Id,因为我可以知道将成为的用户修改的。我是使用 MVVM Light Framework 的初学者,谁能给我这个案例的最佳解决方案?

【问题讨论】:

    标签: wpf mvvm mvvm-light


    【解决方案1】:

    首先将您的变量包装在一个类中。

     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"});
    

    【讨论】:

    • 谢谢!又短又甜!
    【解决方案2】:

    我建议不要使用 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
    }
    

    【讨论】:

    • 您能进一步解释一下您将如何进行导航吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2015-05-10
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多