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 and Dependency Injection と 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 です。ビューモデルを渡すために、ビュー コンストラクターへの依存性注入を使用します。個人的にはUnityではなくMEF(Managed Extensibility Framework)を学んでいます。

于 2012-09-01T06:29:31.430 に答える