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;
    }
}

这行得通,但不幸的是,似乎没有办法确定,当一个文本框被点击时,哪个文本框被点击了。

于 2012-09-27T23:48:08.607 回答