我正在开发一个Windows应用程序,在控件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加载内容,我可以这样做吗?
我知道这可能是几个或三个问题,但我认为他们很容易回答一个有经验的人。
谢谢!
发布于 2014-01-03 18:08:17
您的LongListSelector中有许多项。它们是通过将ItemsSource绑定到作为Items集合一部分的项在那里添加的。这个集合可以是一个List<T>或者更多的ObservableCollection<T>,因为这样,如果正确实现,ObservableCollection中的更改将反映在您的LongListSelector中。T是项的类型-例如,一个名为Book的类。需要将此集合定义为DataContext对象的一部分,您可以在整个页面或页面的一部分上设置该对象。
现在,正如我所提到的,Items集合可能充满了条目--定义为具有某些属性的对象。在您的示例中,这些属性是LineOne和LineTwo,它们可能是字符串。
不能直接绑定到独立存储中的项。您首先需要将这些项加载到内存中。让我们假设您的独立存储中有一个序列化为JSON或XML格式的项列表,这是将列表保存在隔离存储中的一种流行方法。您需要将它们加载到集合(反序列化)中,然后绑定到LongListSelector。是的,这是正确的方法。
左边定义的黄色图像/矩形/边框是静态的,但当然可以在那里。它将简单地作为您在LongListSelector中的每个项的一部分呈现在那里,并且它将不依赖于绑定到的对象。
我建议您阅读以下文章/问题和答案,这些文章/问答可能会解释绑定到列表中的概念,使您更容易理解:
发布于 2014-01-03 18:07:28
最简单的解释(太简单了!)数据绑定是将一个对象的属性绑定到另一个属性(上面的控件),有:
<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中的模板将绑定到集合中各个项的属性。
https://stackoverflow.com/questions/20909559
复制相似问题