以最好的方式這樣做會像這樣:
<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;
}
理想的情況下,該車的細節視圖模型應該是綁定到內容控件的內容父視圖模型的屬性:
<ContentControl
Content="{Binding SelectedCarDetails}"
>
<ContentControl.ContentTemplate>
<DataTemplate>
<local:CarDetails />
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
SelectedCarDetails
會由父視圖模型進行更新,和/或通過在ListBox或ListView選擇, 管他呢。
如果你想用不同類型的用戶控件來替代,可以考慮使用隱含數據模板:
<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文件中。如果您爲其提供任何這些視圖模型類型的內容,它將自動使用相應的數據模板。