2011-07-18 66 views
0

我試圖在這裏將我的大腦甩入MVVM模式。MVVM類實例化和參數

我在我的視圖中有一個網格,以及在我的viewmodel中操縱它並向其添加形狀的各種方法。我意識到我應該儘量避免虛擬機中的那種事情,所以我將這些方法移到了自己的類中。我試圖找出的是

a)應該在哪裏創建新類的實例?目前我已經在我的虛擬機中使用了 IoC.Get()

b)NewClass需要在視圖中獲得一個Grid,我該怎麼做? (我唯一能想到的就是讓虛擬機獲得對其視圖的引用,並將網格 加入到NewClass中,但這似乎並不是最好的方式)

+0

網格中的形狀是數據對象嗎?如果是這樣,虛擬機是他們的合適地點。如果這些形狀純粹是出於UI的目的,那麼我會將它們放在視圖的代碼隱藏中,ViewModel不需要知道它們。 – Rachel

回答

1

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