0

好的,所以我正在尝试将具有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;

我的类AttributeDefinition包含DisplayName的属性。如果我使用组键对列表进行分组,那么列表将显示出来,但是我不能只显示一个简单的项目列表。就像 WPF C# 中的列表框

我正在使用此列表来表示从另一个列表中选择的 AttributeDefinition 列表,该列表显示按其 DisplayName 属性按字母顺序分组的所有 AttributeDefinition,并且显示值绑定到 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;

这个列表工作得很好。后台的数据运行正常,因为当我从属性定义的总列表中选择项目时,它们会从LongListSelector中删除并添加到所选列表Itemssource的LongListSelector

如需进一步调查有关此用户控制的更多代码,请随时询问我将在不违反我的工作保密协议的情况下尽可能多地披露代码。感谢您花时间阅读并可能提供帮助。非常感激。

4

2 回答 2

0
List<AttributeDefinition> m_SelectedAttributes = new List<AttributeDefinition>();
lls_TemplateFields.ItemsSource = m_SelectedAttributes;

因为您刚刚实例化了这个列表并立即绑定它?如何将一些项目添加到列表中

于 2013-06-14T06:34:55.943 回答
0

对此有两个答案。我都试过了,两者都工作。

[1]LongListSelector.ScrollTo(object)如果列表有 1 个或多个项目,则在更新数据时必须将 设置为列表的第一个对象。如...

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
于 2013-06-14T15:30:01.613 回答