我有这个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没有出现任何东西?
答案 0 :(得分:1)
ItemsControl.ItemsSource
必须绑定到一个集合,对于通知,最好的是ObservableCollection<T>
。
您正在设置最后一分钟的DataContext,更好的方法是设置 ViewConode的DataContext可以放在您创建View的位置。
public class Form :UserControl
{
DataContext = new YourViewModel() ;
}
在XAML中:
ItemsSource="{Binding SearchesCollection}"
SearchesCollection
将是YourViewModel
类ObservableCollection<string>
中的属性。每当您向SearchesCollection
添加新项目时,查看更新。
答案 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被点击。