在服务类的视图模型中执行relaycommand



我建立了一个自定义TreeView类,为每个节点设置,如"name/background"等。我还可以设置一个iccommand属性,以便每个节点都可以在必要时执行自定义方法。

我在"treeview服务类"中构建所有这些,然后通过MVVMLight Messenger将菜单发送给用户控件。这一切都工作得很好,但我的问题是,如果我不为节点指定自定义命令,我希望它执行"默认操作",该操作应该位于从Messenger服务接收消息的视图模型中。

基本上我的问题是:我如何在MainViewModel中暴露RelayCommand,以便我可以从另一个视图模型(或我的服务类)引用它,当构建我的树。

要在ViewModel B中引用ViewModel A,您可以使用MVVMLight的ViewModelLocator,就像在模板示例中一样:

你的ViewModelLocator类:

 public class ViewModelLocator
 {
    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        // Register your services
        //...
        // Register your ViewModels
        SimpleIoc.Default.Register<MainViewModel>();
    }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
        "CA1822:MarkMembersAsStatic",
        Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MainViewModel>();
        }
    }
}

在你的NodeViewModel中你可以访问你的默认命令,例如:

  public class NodeViewModel : ViewModelBase
  {
    private ViewModelLocator locator = new ViewModelLocator();
    public RelayCommand NodeCommand
    {
        get
        {
            return locator.Main.DefaultCommand;
        }
    }
}

当你使用MVVM Light visual studio模板创建MVVM Light项目时,你可以找到一个完整的小样本。

希望这对你有帮助!

我相信RelayCommand是一个iccommand。你可以把它作为视图模型的属性公开:

public ICommand MyCommand { get; set;} 

相关内容

  • 没有找到相关文章

最新更新