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#のリストボックスに似ています。

このリストを使用して、DisplayName プロパティによってアルファベット順にグループ化されたすべての AttributeDefinitions を示す別のリストから選択された AttributeDefinitions のリストを表し、表示値は以下に示すように 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

これには2つの答えがあります。私は両方を試しましたが、両方とも機能します。

[1]LongListSelector.ScrollTo(object)リストに 1 つ以上の項目がある場合、データを更新するときにリストの最初のオブジェクトに を設定する必要があります。そのような...

lls_TemplateFields.ItemsSource = m_SelectedAttributes;

if(m_SelectedAttributes.Count > 0)
{
     lls_TemplateFields.ScrollTo(m_SelectedAttributes[0]);
}

[2] これを修正する適切な方法は、DataBinding と WP8 WPF SDK UI でより適切に機能する ObservableCollections を使用して、オブジェクトを に追加するときに更新することですObservableCollection

ObservableCollection<AttributeDefinition> m_SelectedAttributes =
               new  ObservableCollection<AttributeDefinition>();


lls_TemplateFields.ItemsSource = m_SelectedAttributes
于 2013-06-14T15:30:01.613 に答える
0
List<AttributeDefinition> m_SelectedAttributes = new List<AttributeDefinition>();
lls_TemplateFields.ItemsSource = m_SelectedAttributes;

このリストをインスタンス化してすぐにバインドしたからですか? リストに項目を追加してみませんか

于 2013-06-14T06:34:55.943 に答える