2016-08-18 71 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}"/>