2011-07-18 12 views
0

ここで私の脳をMVVMモードに入れようとしています。MVVMクラスのインスタンス化とArg

私は私のビュー内にグリッドを持っており、それを操作してビューモデル内のシェイプを追加するためのさまざまな方法があります。私はVMでこのようなことを避けなければならないことを認識しています。そのため、これらのメソッドを自分のクラスに移しました。私が理解しようとしているのは

です)a)新しいクラスのインスタンスはどこに作成する必要がありますか?現時点では、私のVMには、 を使用しています。IoC.Get()

b)NewClassはビュー内でグリッドを保持する必要がありますが、どうすればいいですか? (私が考えることができるのは、VMがViewへの参照を取得し、GridClassに を渡すことですが、これは最良の方法とは思われません)

+0

グリッド内の図形はデータオブジェクトですか?そうであれば、VMはそのための適切な場所です。図形が純粋にUI用のものであれば、それらをViewのコードビハインドに入れ、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

うーん、私はコルーチンを使って作業していると思います...もちろん、私はコルーチンを使って書いた他のコードを置き換えなければならないことを少し理解しています。ビットごとに、私のコードはあまりにも醜い... もちろん、私は新しいコルーチンに依存を押し出すことができます、私はVMがどのようなグリッドなどについて知る必要があるかについて考える必要があります:D – Kage

関連する問題