2017-09-21 69 views
0

我希望能夠點擊名爲「More」的Button,然後我將用MainWindow中的另一個詳細信息更改當前的UserControl將用戶控件替換爲WPF中的另一個用戶控件MaterialDesigntoolkit

我想作以下,但在leftmenubar的項目,當我運行下面的代碼的最後一行不工作了:

private void btnMore_Click(object sender, RoutedEventArgs e) 
{ 
    CarDetailsViewModel c = new CarDetailsViewModel(); 
    (this.Parent as ContentControl).Content = new CarDetails { DataContext = c }; 
} 

我使用http://materialdesigninxaml.net/

回答

0

以最好的方式這樣做會像這樣:

<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文件中。如果您爲其提供任何這些視圖模型類型的內容,它將自動使用相應的數據模板。

相關問題