首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UWP动态页面

UWP动态页面
EN

Stack Overflow用户
提问于 2016-08-18 15:15:53
回答 1查看 697关注 0票数 0

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

我试图进行内容控制,但它不起作用。

我的xaml代码是:

代码语言:javascript
复制
<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>

感谢您的问候

我已经用以下命令更新了代码:

代码语言:javascript
复制
<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>

但是不能再工作了..。

EN

回答 1

Stack Overflow用户

发布于 2016-08-18 22:49:30

您必须创建一个DataTemplateSelector,您可以在其中根据某种逻辑(目前是数据的类型)来决定将哪个模板应用于ContentControl。

选择器:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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}"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39012054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档