2017-09-21 59 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文件中。如果您为其提供任何这些视图模型类型的内容,它将自动使用相应的数据模板。

相关问题