2017-09-21 12 views
0

Button「More」という名前をクリックしたい場合は、の別の詳細なものを現在の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; 
} 
これはそうのようになります

理想的には、車の詳細の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ファイルに保存します。これらのビューモデルタイプのいずれかのコンテンツを与えると、それは自動的に対応するデータテンプレートを使用します。

関連する問題