2016-08-18 74 views
0

我有一个将管理3个实体(类别,板块,菜单)的UWP应用程序。我有一个viewmodel为每个实体和viewmodel列表来选择要管理的实体。所以我希望当我在页面的viewmodel列表中选择一个实体时,会加载usercontrol。UWP动态页面

我尝试内容控制,但它不工作。

我的XAML代码是:

<ListBox Grid.Row="1" ItemsSource="{Binding ConfigurationItems}" 
      SelectedItem="{Binding ConfigurationItemSelected, Mode=TwoWay}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=ConfigurationAbstract}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

    <StackPanel Grid.Row="1" Grid.Column="1" Margin="10,0,0,0"> 
     <TextBlock Text="{Binding Path=ConfigurationItemSelected.ConfigurationAbstract}" Style="{StaticResource TitleTextBlockStyle}"/> 

     <Grid Grid.Row="1" Grid.Column="1" 
       Visibility="{Binding ImportVisible, Converter={StaticResource b2v} }" 
       > 
      <Grid.RowDefinitions> 
       <RowDefinition Height="40"></RowDefinition> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="75*"></ColumnDefinition> 
       <ColumnDefinition Width="25*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center"> 
       <TextBlock Text="File Importato: "/> 
       <TextBlock Text="{Binding Path= ConfigurationItemSelected.ImportedFilePathName}"/> 
      </StackPanel> 
      <StackPanel Grid.Column="1" Orientation="Horizontal"> 
       <Button Content="Scegli..." Command="{Binding Path=ConfigurationItemSelected.ChooseCommand}" Margin="5,0"></Button> 
       <Button Content="Importa" Command="{Binding Path=ConfigurationItemSelected.ImportCommand}" Margin="5,0"></Button> 
      </StackPanel> 
     </Grid> 
     <ContentControl Content="{Binding Path=ConfigurationItemSelected}"/> 
    </StackPanel> 

谢谢 问候

我有更新我的代码:

<Page.Resources> 
     <DataTemplate x:DataType="vm:CategoriesViewModel" x:Key="Categorie"> 
      <controls:UcCategories DataContext="{Binding Path=ConfigurationItemSelected}" /> 
     </DataTemplate> 
     <DataTemplate x:DataType="vm:MenuItemsViewModel" x:Key="Menu"> 
      <controls:UcMenu DataContext="{Binding Path=ConfigurationItemSelected}" /> 
     </DataTemplate> 
     <DataTemplate x:DataType="vm:PlatesViewModel" x:Key="Piatti"> 
      <controls:UcPlates DataContext="{Binding Path=ConfigurationItemSelected}" /> 
     </DataTemplate> 

    </Page.Resources> 

<ContentControl Content="{Binding Path=ConfigurationItemSelected}"> 

      </ContentControl> 

但是又坏了......

+0

一个的ContentTemplate添加到您的ContentControl中,使ContentControl中的内容结合单向 – nkoniishvt

+0

你有一些例子吗? –

+0

您可以将ContentTemplate设置为包含您的UserControl的DataTemplate,就像您在ListBox的ItemTemplate中所做的一样 – nkoniishvt

回答

0

你必须创建一个DataTemplateSelector,您可以在其中决定哪个模板应用对ContentControl说谎,依赖于某种逻辑(现在是数据的类型)。

选择:

public class MyDataTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate CategoryTemplate { get; set; } 
    public DataTemplate MenuTemplate { get; set; } 
    public DataTemplate PlateTemplate { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     if (item is CategoriesViewModel) 
     { 
      return CategoryTemplate; 
     } 
     else if (item is MenuItemsViewModel) 
     { 
      return MenuTemplate; 
     } 
     else if (item is PlatesViewModel) 
     { 
      return PlateTemplate; 
     } 
     else 
     { 
      return base.SelectTemplateCore(item); 
     } 
    } 
} 

XAML:

<Page.Resources> 
    <DataTemplate x:DataType="vm:CategoriesViewModel" x:Key="Categorie"> 
     <controls:UcCategories DataContext="{Binding Path=ConfigurationItemSelected}" /> 
    </DataTemplate> 
    <DataTemplate x:DataType="vm:MenuItemsViewModel" x:Key="Menu"> 
     <controls:UcMenu DataContext="{Binding Path=ConfigurationItemSelected}" /> 
    </DataTemplate> 
    <DataTemplate x:DataType="vm:PlatesViewModel" x:Key="Piatti"> 
     <controls:UcPlates DataContext="{Binding Path=ConfigurationItemSelected}" /> 
    </DataTemplate> 

    <local:MyDataTemplateSelector x:Key="TemplateSelector" 
            CategoryTemplate="{StaticResource Categorie}" 
            MenuTemplate="{StaticResource Menu}" 
            PlateTemplate="{StaticResource Piatti}"/> 
</Page.Resources> 

<ContentControl Content="{Binding Path=ConfigurationItemSelected}" 
       ContentTemplateSelector="{StaticResource TemplateSelector}"/>