0

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

现在我必须通过构造函数将 UnityContainer 依赖注入到 ViewModel 中,并用字符串解析 ICommand。我真的不想将容器传递给我的视图模型,而是希望将它保存在我的控制器中。

这些只是片段,不是全部。并不是说它们是那么复杂的课程,尽管我尝试学习。


视图模型

    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 和依赖注入和 mvvm(带控制器)对我来说相对较新。

4

1 回答 1

0

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

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

视图使用绑定连接到视图模型。

所以一个简短的例子:(
用法):

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

(例子):

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

然后当然将视图的数据上下文添加到视图模型中。示例(在代码隐藏中完成):

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

在视图模型中

public ICommand ClickCommand { get; set; }

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

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

我不完全确定您所说的“控制器”是什么意思。我学到的设计模式是 View -> ViewModel -> Model。并在视图构造函数中使用依赖注入以传递视图模型。就我个人而言,我正在学习 MEF(托管可扩展性框架)而不是 Unity。

于 2012-09-01T06:29:31.430 回答