MVVM类实例化和参数

问题描述:

我试图在这里将我的大脑甩入MVVM模式。MVVM类实例化和参数

我在我的视图中有一个网格,以及在我的viewmodel中操纵它并向其添加形状的各种方法。我意识到我应该尽量避免虚拟机中的那种事情,所以我将这些方法移到了自己的类中。我试图找出的是

a)应该在哪里创建新类的实例?目前我已经在我的虚拟机中使用了 IoC.Get()

b)NewClass需要在视图中获得一个Grid,我该怎么做? (我唯一能想到的就是让虚拟机获得对其视图的引用,并将网格 加入到NewClass中,但这似乎并不是最好的方式)

+0

网格中的形状是数据对象吗?如果是这样,虚拟机是他们的合适地点。如果这些形状纯粹是出于UI的目的,那么我会将它们放在视图的代码隐藏中,ViewModel不需要知道它们。 – Rachel

A)如果您需要以无法通过视图模型的方式操纵网格,请查看使用Coroutines。对视图的引用在ActionExecutionContext中传递。

public interface IResult 
{ 
    void Execute(ActionExecutionContext context); 
    event EventHandler<ResultCompletionEventArgs> Completed; 
} 

public class ActionExecutionContext 
{ 
    public ActionMessage Message; 
    public FrameworkElement Source; 
    public object EventArgs; 
    public object Target; 
    public DependencyObject View; 
    public MethodInfo Method; 
    public Func<bool> CanExecute; 
    public object this[string key]; 
} 
+0

嗯,我想我有它使用协同程序工作...当然,现在我了解了一些关于它们,我必须替换我用协程程序写的其他一些奇怪的代码。一点一滴,我的代码变得不那么难看了......当然,如果我可以将依赖关系推送到新协程,现在我需要考虑我的虚拟机是否需要知道任何网格等:D – Kage