需要帮助实现DataTemplate Selector [WP8.1] [WindowsPhone]

时间:2015-05-08 15:31:55

标签: c# xaml windows-phone-8.1

我使用AppStudio制作了一个简单的RSS Feed应用程序,正如标题所示,我需要一些关于实现DataTemplateSelector的帮助。

我想要使用Feed的第一个和最后一个项目" BigCards"项目模板,而其他人拥有" SmallCards"项目模板。

以下是项目模板样式的代码:



<!-- BigCards Item -->
    <DataTemplate x:Key="BigCards">
        <Grid Style="{StaticResource BoxGrid}" Margin="0,0,0,10" Height="380">
            <Rectangle Width="900"/>
            <Grid Style="{StaticResource BoxGrid}">
                <Grid.RowDefinitions>
                    <RowDefinition Height="280"/>
                    <RowDefinition Height="220"/>
                </Grid.RowDefinitions>
                <Image Grid.Row="0" Source="{Binding ImageUrl}" Stretch="UniformToFill" Margin="0,4,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                <Grid Grid.Row="1" Height="220" Margin="10,10,10,10">
                    <Grid Height="210">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <TextBlock Grid.Row="0" Style="{StaticResource BoxTitleStyle}" Text="{Binding Title}" MaxLines="2"/>
                    </Grid>
                </Grid>
            </Grid>
        </Grid>
    </DataTemplate>

    <!-- SmallCards Item -->
    <DataTemplate x:Key="SmallCards">
        <Grid Height="120" Margin="0,0,0,10" Style="{StaticResource BoxGrid}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="120"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image Source="{Binding ImageUrl}" Stretch="UniformToFill" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <Grid Grid.Column="1">
                <Rectangle Width="900" Height="0"/>
                <Grid Margin="16,5,16,5">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <TextBlock Grid.Row="0" Style="{StaticResource BoxTitleStyle}" Text="{Binding Title}" MaxLines="2"/>
                    <TextBlock Grid.Row="1" Margin="0,5,0,0" Style="{StaticResource BoxSubtitleStyle}" Text="{Binding Summary}"/>
                </Grid>

            </Grid>
        </Grid>
&#13;
&#13;
&#13;

以下是Mainpage.xaml.cs背后的一些代码,这些代码需要作为这些项目模板之间的触发器:

&#13;
&#13;
  //Listim dinamik i artikujve

        public abstract class TemplateSelector : ContentControl
        {
            public abstract DataTemplate SelectTemplate(object item, DependencyObject container);

            protected override void OnContentChanged(object oldContent, object newContent)
            {
                base.OnContentChanged(oldContent, newContent);

                ContentTemplate = SelectTemplate(newContent, this);
            }
        }

        //endof Abstract Class

        public class ArticleTemplateSelector : TemplateSelector
        {
            public DataTemplate BigCards
            {
                get;
                set;
            }

            public DataTemplate SmallCards
            {
                get;
                set;
            }


          public override DataTemplate SelectTemplate(object item, DependencyObject container)
          {
                // Determine which template to return;

                return null;
            }
        }
&#13;
&#13;
&#13;

如果有人可以帮我解决我应该在DataTemplate SelectTemplate类中插入的内容,我会非常感激,所以RSS Feed中的第一个和最后一个项目将使用BigCards模板,而其他人将使用SmallCards ......?

这是主页面xaml,目前使用BigCards模板:

&#13;
&#13;
<Hub x:Name="Container" Grid.Row="1" Margin="0,28,0,0" Background="{StaticResource AppBackground}" DataContext="{Binding}" SectionsInViewChanged="OnSectionsInViewChanged">
                    <HubSection x:Name="LajmetSection" Padding="0,-30,20,0" Width="400" DataContext="{Binding MainViewModel.LajmetModel}"
                        d:DataContext="{d:DesignData Source=/Assets/Data/LajmetDataSource.json, Type=vm:LajmetViewModel, IsDesignTimeCreatable=true}"
                        ContentTemplate="{StaticResource BigCards}" IsHeaderInteractive="{Binding HasMoreItems}" />
                </Hub>
&#13;
&#13;
&#13;

此致

1 个答案:

答案 0 :(得分:0)

我以不同的方式解决了它。我修改了我网站的RSS页面,为每10个帖子分配一个静态作者。在我的情况下,我每隔10个帖子分配到&#34; X&#34;作者。然后我实现了这个简单的陈述

if (RssSchema.Author==X) use BigCards; else use SmallCards;

这很好地完成了这项工作。如果有人需要帮助,请随时与我联系。