3

私が理解しているように、ViewModelをViewにバインドすると、DataContextを介して行われます。何かのようなもの

   <Grid.Resources>
        <myData:MyVM x:Key="Vm" />
    </Grid.Resources>
    <Grid.DataContext>
        <Binding Source="{StaticResource Vm}"></Binding>
    </Grid.DataContext>

ViewModelがどのように設定されるかについての私の理解は、ViewがViewModelを(バインディングを介して)呼び出し、ViewModelがモデルと通信し、それ自体(ViewModel)を目的の状態にするために必要なことをすべて実行することです。

では、「モデル」がUIによって作成された場合はどうなりますか?私のモデルは、MainWindowコンストラクターのパラメーターです。

だから、私のビュー(メインウィンドウ)は

public MainWindow(MyObject myObject)
    {
          InitializeComponent();
    }

私のViewModelは

 public class ViewModel 
{
    #region properties

    private MyObject myList;
    public MyObject MyList
    {
        get; set ;
    }

    #region Constructors

    public ViewModel ()
    {

    }

    public ViewModel (MyObject myObject)
    {
        this.myObject= myObject;
    }        
}

これで、アプリケーションが実行されたときに(そして、ここで間違った単語を使用していると確信しています)、パラメーターをViewModelに「注入」するにはどうすればよいですか?それとも、より良いアプローチがあると思いますか?

編集

私が達成しようとしていることを説明することは役立つかもしれません。私のプログラムはいくつかのタスクを実行し、ログを作成します。ログはメモリに保存されます。プログラムプロセスの最後に、ログが画面に表示されます。これが、オブジェクトをコンストラクターに渡す理由です。

4

2 に答える 2

2

それとも、より良いアプローチがあると思いますか?

ビューをビューモデルにバインドすることをお勧めします。MVVM パターンに従う場合は、これが 1 つの方法です。依存性注入を使用しているかどうかはわかりませんが、質問で「注入」と述べているので、使用していると思います。コードサンプルは次のとおりです。

ビューのデータコンテキストをビューモデルに設定します。

 public YourView(IUnityContainer container)
        {
            InitializeComponent();
            this.DataContext = container.Resolve<IYourViewModel>();
        }

モデルをビューモデルに注入します。

 private YourModel _yourModel;

 public YourViewModel(YourModel yourModel)        
        {
            _yourModel = yourModel;
            InitializeDelegateCommands();
        }

これで、ビューモデルがビューにバインドされました。すべてのモデルの相互作用は、ビューモデルを通じて調整する必要があります。

于 2013-01-28T15:31:25.060 に答える
1

コンストラクターを追加することを忘れないInitializeComponent()でください。MainWindow

public MainWindow(MyObject myObject)
{
    InitializeComponent();
}
于 2013-01-28T14:48:52.293 に答える