设置LongListSelector

时间:2014-01-03 17:41:21

标签: c# windows-phone-8 windows-phone isolatedstorage longlistselector

我正在开发一个Windows Phone应用程序,以在控件LongListSelector中练习我的知识。应用程序中的一个页面,中间的页面包含以下代码:

<!--Panorama item two-->
<phone:PanoramaItem x:Name="tasksPage" Header="Tasks">
    <!--Double line list with image placeholder and text wrapping using a floating header that scrolls with the content-->
    <phone:LongListSelector Margin="0,-38,-22,2" ItemsSource="{Binding Items}" LayoutMode="List">
        <phone:LongListSelector.ListHeaderTemplate>
            <DataTemplate>
                <Grid Margin="12,0,0,38">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <TextBlock Text="second item"
                               Style="{StaticResource PanoramaItemHeaderTextStyle}"
                               Grid.Row="0"/>
                </Grid>
            </DataTemplate>
        </phone:LongListSelector.ListHeaderTemplate>
        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="12,2,0,4" Height="105" Width="432">
                    <!--Replace rectangle with image-->
                    <Border BorderThickness="1" Width="99" Height="99" BorderBrush="#FFFFC700" Background="#FFFFC700"/>
                    <StackPanel Width="311" Margin="8,-7,0,0">
                        <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Margin="10,0" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeLarge}" />
                        <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="10,-2,10,0" Style="{StaticResource PhoneTextSubtleStyle}" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
    </phone:LongListSelector>
</phone:PanoramaItem>

有人可以简要解释一下DataBindings是什么以及如何使用它们(我做了一些研究)。我可以将LongListSelector绑定到IsolatedStorage中的列表吗?

我之前在另一个应用程序中创建了一个ListBox,将IsolatedStorage中的内容加载到其中,但我不知道这是否是正确的方法。现在LongListSelector中的项目左边有一个黄色图像 - 如果我从IsolatedStorage以编程方式加载内容,我可以这样做吗?

我知道这可能是一两个问题,但我认为对于有经验的人来说,回答起来相当简单。

谢谢!

2 个答案:

答案 0 :(得分:0)

最简单的解释(过度简化!)是数据绑定将对象的属性绑定到上面控件的另一个属性,有:

 <TextBlock Text="{Binding LineOne}" ... />

这在功能上等同于:

TextBlock t = new TextBlock();
SomeObject o = new SomeObject() { LineOne = "The value of line 1" };
t.Text = o.LineOne;
// and then a propertychange listener to update t.text if o.lineone ever changes
o.PropertyChanged += (s,e) => { if (e.PropertyName == 'LineOne') t.Text = o.LineOne; };

您无法将直接绑定到隔离存储中的某些内容,但您可以让对象从隔离存储加载其内容,通过Items属性公开这些项,然后将其设置为作为LLS的数据上下文。

LongListSelector(或其他ItemsControl类型)的情况下,itemscontrol的ItemsSource属性绑定到某些对象集合(如ObservableCollection<T>,这会使其项目更新每当集合更新。然后ItemsControl内的模板绑定到集合中各个项的属性。

答案 1 :(得分:0)

您的LongListSelector内有多个项目。通过将ItemsSource绑定到Items集合的一部分的项目,将数据绑定添加到那里。此集合可以是List<T>或更频繁ObservableCollection<T>,因为如果正确实施,ObservableCollection中的更改将反映在您的LongListSelector中。 T是您商品的类型 - 例如,名为Book的类。此集合需要定义为DataContext对象的一部分,您可以在整个页面或页面的一部分上设置该对象。

现在,正如我所提到的,Items集合可能充满了项目 - 定义为具有某些属性的对象。在您的情况下,这些属性是LineOneLineTwo,可能是字符串。

您无法直接绑定到独立存储中的项目。首先需要将这些项加载到内存中。假设您有一个在隔离存储中序列化为JSON或XML格式的项目列表,这是将列表保留在独立存储中的一种常用方法。您需要将它们加载到集合中(反序列化),然后绑定到LongListSelector。这是正确的方法,是的。

左边定义的黄色图像/矩形/边框是静态的,但当然可以在那里。它只是作为LongListSelector中每个项目的一部分呈现在那里,它不依赖于你绑定的对象。

我建议你阅读以下文章/问题和答案,这些文章可以解释绑定到列表的概念更容易让你理解: