2016-08-18 3 views
0

У меня есть приложение UWP, которое будет управлять 3 объектами (категория, плита, меню). У меня есть 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 в связывающую OneWay – nkoniishvt

+0

у вас есть какой-то пример? –

+0

Вы можете установить ContentTemplate в DataTemplate, который содержит ваш UserControl, как вы это делали в ItemTemplate ListBox – nkoniishvt

ответ

0

You необходимо создать DataTemplateSelector, где вы можете решить, какое приложение шаблона совпадающие с ContentControl, зависят от некоторой логики (на данный момент тип данных).

Selector:

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}"/> 
Смежные вопросы