への最善の方法を使用しています後ろ
<ContentControl>
<ContentControl.ContentTemplate>
<DataTemplate>
<local:CarDetails />
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
コード:
private void btnMore_Click(object sender, RoutedEventArgs e)
{
CarDetailsViewModel c = new CarDetailsViewModel();
(this.Parent as ContentControl).Content = c;
}
これはそうのようになります
理想的には、車の詳細のviewmodelは、コンテンツコントロールの内容にバインドされた親のviewmodelのプロパティでなければなりません:
<ContentControl
Content="{Binding SelectedCarDetails}"
>
<ContentControl.ContentTemplate>
<DataTemplate>
<local:CarDetails />
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
SelectedCarDetails
は、リストボックスまたはリストビューで親のviewmodelによって、および/または選択によって更新されます、または何でも。
あなたは異なるタイプのユーザーコントロールと交換したい場合は、暗黙のデータテンプレート使用することを検討してください:これらのUserControlのリソースで、または任意の親/祖父母のリソースで定義することができ
<ContentControl>
<ContentControl.Resources>
<DataTemplate DataType="{x:Type models:CarDetailsViewModel}">
<local:CarDetails />
</DataTemplate>
<DataTemplate DataType="{x:Type models:BikeDetailsViewModel}">
<local:BikeDetails />
</DataTemplate>
<DataTemplate DataType="{x:Type models:BoatDetailsViewModel}">
<local:BoatDetails />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
を/等。要素を同じXAMLファイルに保存します。これらのビューモデルタイプのいずれかのコンテンツを与えると、それは自動的に対応するデータテンプレートを使用します。