viewModelsをインスタンス化する際に問題が発生しています。MVVM ViewとViewModelのバインディングの問題
多くの場合、依存関係を注入する必要があるため、ViewModelLocatorを使用しています。しかし、ViewModelに引数を渡す必要がある場合があります。私が理解していることから、私はViweModel-Firstアプローチを使用する必要があります。つまり、実行時にビューにバインドされたViewModel用のDataTemplateを作成する必要があります。
ViewModelを作成して引数を渡すと、正しいコンストラクタが呼び出されるという問題があります。ただし、ViewModelはビューにバインドされているため、ビューはviewmodelのデフォルトのパラメータのないコンストラクタを呼び出します。ここで
は、XAMLは、ユーザーコントロールのためにどのように見えるかを私はViewModelにバインドしています:
<UserControl x:Class="MyView">
<UserControl.DataContext>
<viewModels:MyViewModel></viewModels:MyViewModel>
</UserControl.DataContext>
</UserControl>
データテンプレートは、次のようになります。ここでは
<DataTemplate DataType="{x:Type viewModels:MyViewModel}">
<views:MyView></views:MyView>
</DataTemplate>
は、サンプルのViewModelです:
public class MyViewModel : ViewModelBase
{
private MyModel _myModel;
public MyViewModel()
{
}
public MyViewModel(MyModel myModel)
{
_myModel = myModel;
}
}
正しいコンストラクタを使用してviewModelを作成し、arguを渡すとviewModelは、viewModelのデフォルトのパラメータのないコンストラクタを使用してビューによって再度作成されます。
誰もがこれが起こっている理由を説明し、正しく動作するようにviewmodel-firstアプローチを設定する方法を説明してもらえますか?私は犠牲になり、私はこの一日中働いています。
おかげで、 ティム
私は助けることができるようにいくつかのコードを表示してください。あなたのコメントだけでは何の問題なのかははっきりしない。 – user1286901
私は混乱のために謝罪します。私は本当にオフィスから投稿することはできません。それはロックされています。基本的に私の質問に答えました。そこに2つの問題があった。最初に、ロケータがビューモデルをインスタンス化するために使用されたため、ロケータを使用してビュー内のコンテキストをバインドし、再びviemodelを呼び出しました。 2番目の問題は、コンテンツコントロールに返されて表示されていたユーザーコントロールのデータコンテキストを定義することでした。したがって、コントロールとコードの両方によって呼び出されました。再度、感謝します。 – user953710