好的,我正在尝试将带有 DisplayName 属性的对象列表绑定到长列表选择器。
XAML代码
<phone:LongListSelector x:Name="lls_TemplateFields" HorizontalAlignment="Left" Width="450" Grid.Row="2" Height="400" LayoutMode="List" Background="#FF9E9D9D" IsGroupingEnabled="False">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding DisplayName}" Foreground="Black" FontSize="24"/>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
C#代码
List<AttributeDefinition> m_SelectedAttributes = new List<AttributeDefinition>();
lls_TemplateFields.ItemsSource = m_SelectedAttributes;
我的班级属性定义包含 DisplayName 的属性。如果我使用组密钥对列表进行分组,则列表将显示,但是我不能只显示要显示的项目的简单列表。就像WPF C#中的列表框一样。
我使用此列表来表示从另一个列表中选择的AttributeDefinitions的列表,该列表显示按其DisplayName属性按字母顺序分组的所有AttributeDefinitions,并且Display Value被绑定到DisplayName属性,如下所示......
XAML
<phone:LongListSelector x:Name="lls_AttributeList" HorizontalAlignment="Left" Height="450" VerticalAlignment="Top" Width="450" HideEmptyGroups="True" IsGroupingEnabled="True" SelectionChanged="SelectionChanged">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid>
<Border BorderThickness="2">
<TextBlock Text="{Binding DisplayName}" Foreground="{StaticResource PhoneChromeBrush}" FontSize="24"/>
</Border>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
<phone:LongListSelector.GroupHeaderTemplate>
<DataTemplate>
<Grid Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Blue">
<Border BorderThickness="4">
<TextBlock Text="{Binding Key}" Foreground="White" FontSize="38" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</Grid>
</DataTemplate>
</phone:LongListSelector.GroupHeaderTemplate>
</phone:LongListSelector>
C#
List<AttributeKeyGroup<AttributeDefinition>> DataSource = AttributeKeyGroup<AttributeDefinition>.CreateGroups(AttributeData,
Thread.CurrentThread.CurrentUICulture,
(AttributeDefinition aDef) => { return aDef.Type; },
true);
lls_AttributeList.ItemsSource = DataSource;
这个列表很好用。并且后台中的数据运行正常,因为当我从 attributedefinitions 的总列表中选择项目时,它们将从 LongListSelector 中删除并添加到 LongListSelector < / strong>所选列表 Itemssource
有关此用户控制的更多代码的进一步查询,请随时问我将尽可能多地披露代码,而不会违反我的工作保密协议。感谢您抽出宝贵时间阅读并提供帮助。非常感谢。
答案 0 :(得分:0)
List<AttributeDefinition> m_SelectedAttributes = new List<AttributeDefinition>();
lls_TemplateFields.ItemsSource = m_SelectedAttributes;
因为你刚刚实例化了这个列表并立即绑定它?如何将一些项目添加到列表中
答案 1 :(得分:0)
这有两个答案。我试过两个都工作。
[1]如果列表包含1个或更多项,则必须在更新数据时将LongListSelector.ScrollTo(object)
设置为列表的第一个对象。比如...
lls_TemplateFields.ItemsSource = m_SelectedAttributes;
if(m_SelectedAttributes.Count > 0)
{
lls_TemplateFields.ScrollTo(m_SelectedAttributes[0]);
}
[2]解决这个问题的正确方法是使用ObservableCollections,它可以更好地与DataBinding和WP8 WPF SDK UI一起使用,以便在将对象添加到ObservableCollection
时进行更新。
ObservableCollection<AttributeDefinition> m_SelectedAttributes =
new ObservableCollection<AttributeDefinition>();
lls_TemplateFields.ItemsSource = m_SelectedAttributes