从Controller解析ViewModel的命令? (PRISM)

时间:2012-08-06 23:05:40

标签: command prism viewmodel icommand

我如何从控制器解析ViewModel的命令?

现在我不得不通过构造函数将UnityContainer注入ViewModel,并使用字符串解析ICommand。我真的不想将容器传递给我的viewmodel,而是希望将它保存在我的控制器中。

这些只是片段,而不是整个事情。虽然我试图学习,但并不是说它们是那么复杂的课程。


视图模型

    private ICommand loadedCommand;
    public ICommand LoadedCommand
    {
        get { return loadedCommand; }
        set
        {
            loadedCommand = value;
            RaisePropertyChanged(() => this.LoadedCommand);
        }
    }

    public MainViewModel(IUnityContainer container)
    {
      LoadedCommand = container.Resolve<ICommand>("LoadedCommand")
    }

控制器

    DelegateCommand LoadedCommand;
    new DelegateCommand(() => ViewLoaded());

控制器

        Container.RegisterInstance<ICommand>("LoadedCommand", LoadedCommand);

我甚至不知道我是否正确地走这条路。我有点潜入一切,Prism和Dependency Injection以及mvvm(带控制器)对我来说相对较新。

1 个答案:

答案 0 :(得分:0)

我可能不完全确定你的问题。但我理解MVVM命令的方式是:你有视图而不是点击事件你使用命令对象。

原因是,单击事件转到代码隐藏,而使用命令,您可以将逻辑转移到视图模型。

该视图使用绑定来连接到viewmodel。

这是一个简短的例子:
(用法):

<Element Property="{Binding PropertyNameInTheViewModel}" />

(实施例):

<Button Command="{Binding ClickCommand}" />

然后当然将View的datacontext设置为viewmodel。示例(在代码隐藏中完成):

public partial class View : Window
{
   public View(ViewModel vm)
   {
       InitializeComponent();
       this.DataContext = vm:
   }
}

在viewmodel中

public ICommand ClickCommand { get; set; }

#region constructor
public Viewmodel()
{
    ClickCommand = new DelegateCommand(ButtonClick);
}
#endregion

private void ButtonClick()
{
    // handle the click
}

我不完全确定'控制器'是什么意思。我学到的设计模式是View - &gt; ViewModel - &gt;模型。并使用依赖注入到视图构造函数中以传递viewmodel。就个人而言,我正在学习MEF(Managed Extensibility Framework)而不是Unity。