我如何从控制器解析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(带控制器)对我来说相对较新。
答案 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。