UWP动态页面
问题描述:
我有一个将管理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>
但是又坏了......
答
你必须创建一个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}"/>
一个的ContentTemplate添加到您的ContentControl中,使ContentControl中的内容结合单向 – nkoniishvt
你有一些例子吗? –
您可以将ContentTemplate设置为包含您的UserControl的DataTemplate,就像您在ListBox的ItemTemplate中所做的一样 – nkoniishvt