Stackpanel / Itemscontrol数据绑定

时间:2012-09-27 23:23:02

标签: c# itemscontrol stackpanel

我有这个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没有出现任何东西?

2 个答案:

答案 0 :(得分:1)

ItemsControl.ItemsSource必须绑定到一个集合,对于通知,最好的是ObservableCollection<T>

您正在设置最后一分钟的DataContext,更好的方法是设置 ViewConode的DataContext可以放在您创建View的位置。

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

在XAML中:

ItemsSource="{Binding SearchesCollection}"

SearchesCollection将是YourViewModelObservableCollection<string>中的属性。每当您向SearchesCollection添加新项目时,查看更新。

This Databinding Tutorial应该有帮助。

答案 1 :(得分:0)

感谢Lews Therin,我设法最终将我的数据绑定到stackpanel:

<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时,似乎无法确定哪个TextBox被点击。

相关问题