1

私はこのXAMLを持っています:

 <ItemsControl x:Name="recentSearches"
               Margin="0,65,0,0">
               <ItemsControl.ItemsPanel>
                   <ItemsPanelTemplate>
                         <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                         <TextBlock Text="{Binding q}"
                                TextWrapping="Wrap"
                                Foreground="AliceBlue"
                                Padding="2,6,2,2"
                                Margin="12,-6,12,0"
                                FontSize="20" />
                      </DataTemplate>
                 </ItemsControl.ItemTemplate>

そしてこのコードビハインド:

private void showLatestSearches()
        {
            if (fmn.checkLatestSearchesExtistence())
            {
                List<RecentSearchItem> recent = new List<RecentSearchItem>();
                List<String> l = fmn.readLatestSearches();
                for (int i = 0; i <= l.Count-1; i += 1)
                {
                    RecentSearchItem r = new RecentSearchItem();
                    r.q = l[i];
                    r.generalbg = grau;
                    recent.Add(r);
                }
                recentSearches.DataContext = recent;
            }
        }

fmn というオブジェクトは、分離ストレージから .txt を読み取ります。しかし、この StackPanel で何も表示されないのはなぜでしょうか?

4

2 に答える 2

1

ItemsControl.ItemsSourceコレクションにバインドする必要があります。通知の場合はObservableCollection<T>.

最後の可能な限り DataContext を設定しています。より良い方法は、DataContext を ViewModel に設定することであり、ビューを作成する場所にすることができます。

public class Form :UserControl
{
  DataContext = new YourViewModel() ;
}

XAML の場合:

ItemsSource="{Binding SearchesCollection}"

SearchesCollectionのプロパティになりYourViewModelますObservableCollection<string>SearchesCollectionビューの更新に新しいアイテムを追加するたびに。

このデータバインディング チュートリアルが役に立ちます。

于 2012-09-27T23:27:04.273 に答える
0

Lews Therin のおかげで、最終的にデータをスタックパネルにバインドできました。

<ItemsControl x:Name="recentSearches"
              ItemsSource="{Binding recent}"
              Background="{Binding generalbg}"
              Margin="0,65,0,0" Tap="recentSearches_Tap">
                    <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding q}"
                                               Foreground="{Binding foreground}"
                                               TextWrapping="Wrap"
                                               Padding="2,6,2,2"
                                               Margin="12,-6,12,0"
                                               FontSize="20" />
                     </DataTemplate>
                            </ItemsControl.ItemTemplate>
 </ItemsControl>

および背後にあるコード:

private void showLatestSearches()
{
    if (fmn.checkLatestSearchesExtistence())
    {
        List<RecentSearchItem> recent = new List<RecentSearchItem>();
        List<String> l = fmn.readLatestSearches();
        for (int i = 0; i <= l.Count-1; i += 1)
        {
            RecentSearchItem r = new RecentSearchItem();
            r.q = l[i];
            r.generalbg = grau;
            r.foreground = blau;
            recent.Add(r);
        }
        recentSearches.ItemsSource = recent;
    }
}

これは機能しますが、残念ながら、タップされたときにどの TextBox がタップされたかを判断する方法はないようです。

于 2012-09-27T23:48:08.607 に答える