我正在尝试做一些我认为非常简单的事情,但是...... 我创建了一个数据透视应用程序并在MainPage.xaml中插入了一个列表框
< ListBox x:Name = "partyList" Margin = "0,0,-12,0" >
< ListBox.ItemTemplate >
< DataTemplate >
< StackPanel Orientation = "Horizontal" Margin = "0,0,0,17" >
< StackPanel Width = "311" >
< TextBlock Text = "{Binding throwLocation}"
TextWrapping = "Wrap"
Style = "{StaticResource PhoneTextExtraLargeStyle}" />
< TextBlock Text = "{Binding throwText}"
TextWrapping = "Wrap"
Margin = "12,-6,12,0"
Style = "{StaticResource PhoneTextSubtleStyle}" />
</ StackPanel >
</ StackPanel >
</ DataTemplate >
</ ListBox.ItemTemplate >
</ ListBox >
我想填写该列表框中的内容..并在 mainpage.xaml.cs 中创建了ObservableCollection
,并认为我可以指向ItemsSource
,但是列表中没有显示任何内容。
public class ListItems
{
public string throwText;
public string throwLocation;
}
List<ListItems> listItems = new List<ListItems>();
public ObservableCollection<ListItems> oblItems =
new ObservableCollection<ListItems>();
// Load data for the ViewModel Items
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
ListItems li = new ListItems();
//li.thumb = new BitmapImage();
li.throwLocation = "Denmark. Åbenrå";
li.throwText = "Throw text";
oblItems.Add(li);
partyList.DataContext = oblItems; // Don't know if this makes any sense?
partyList.ItemsSource = oblItems;
MessageBox.Show(oblItems[0].throwLocation);
}
我收到消息框,我可以看到数据已经到达了oblItems集合,但列表框中没有任何内容。
我做错了什么?我认为这应该很简单。
答案 0 :(得分:1)
好的,你的问题的答案有两个部分,一个是绑定失败的原因,另一个是提示。 您的数据未显示的原因是因为“ListItems”类中的两个属性未正确声明,它们需要使用Getters和Setter完全声明属性,如下所示:
public class ListItems
{
public string throwText { get; set; }
public string throwLocation { get; set; }
}
除非您正确公开值,否则Silverlight无法绑定并正确请求数据。
现在提示一下 如果使用Windows Phone SDK启动DataBound模板,您将看到一种更好的方法,通过使用MVVM(适当数据绑定的框架),您可以分离视图(XAML),模型(您的数据看起来是什么)比如,例如你的属性)和数据。 MVVM是一种更加数据/类型安全的方式来设计通过数据绑定显示数据的应用程序。 一旦你仔细研究过,我还建议你看看MVVMLight(http://mvvmlight.codeplex.com)或Calburn.Micro(http://caliburnmicro.codeplex.com)这样的框架,以便为你做好准备。将来
希望这有帮助。
答案 1 :(得分:0)
您需要在列表上调用databind:partyList.DataBind()。这就是实际添加到列表中的项目的原因。