ViewModels間の通信方法を理解する必要があります。私はMVVMに新しいので、親切にしてください。ここでMVVMパターン、ViewModel DataContext質問
がダウン易しく書き直さ例は
クラス定義(私はParentViewModelにChild.PropertyChangedイベントを夢中にしていることを前提とし)です:
public class ParentViewModel : ViewModelBase
{
public ChildViewModel Child { get; set; }
}
public class ChildViewModel : ViewModelBase
{
String _FirstName;
public String FirstName
{
get { return _FirstName; }
set
{
_FirstName = value;
OnPropertyChanged("FirstName");
}
}
}
ここでは、リソースディクショナリ
<DataTemplate DataType="{x:Type vm:ParentViewModel}">
<vw:ParentView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ChildViewModel}">
<vw:ChildView/>
</DataTemplate>
で見るものです
とChildViewのコードビハインド:
public partial class ChildView : UserControl
{
public QueueView()
{
InitializeComponent();
DataContext = new ChildViewModel();
}
}
明白な問題は、ChildViewが(DataTemplateからの選択によって)インスタンス化されると、新しいChildViewModelクラスを作成し、ParentViewModelはそのインスタンスにアクセスできないということです。
DataTemplateが選択された元のViewModelになるように、ViewのDataContextをインスタンス化するにはどうすればよいですか?
明白な修正点は、ChildViewModelのプロパティをParentViewModelにmmergeすることですが、再利用のために分離することになります。
私はその答えが自明であると確信しています、私はちょうどそれが何であるか知りたいです。 :)
ありがとうございます。
DataContext = new ChildViewModel();
は、ビューのDataContext
は、WPFによって自動的に設定されます。
ところで、例を単純化するためにクラス名を変更したとします。コードビハインドの "ChildView"のクラス名は、代わりに "QueueView"です。 –
これは誤植ですか? –
はい、これはタイプミスでした。申し訳ありません:) – Jose