2011-10-02 54 views
0

我试图做一些事情,我认为将是非常简单的失落,但.. 我创建了一个支点申请和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 > 

我想以填充该列表框中的东西..并创建了一个ObservableCollectionmainpage.xaml.cs,我想我可以指向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

您需要在列表上调用数据绑定:partyList.DataBind()。这就是实际添加到列表中的项目。

+0

现在速度很快! :-)但是在partyList对象(Listbox)上没有这样的方法? – user975369

+0

你使用的是什么类型的listBox?如果您浏览到partyList的定义并让我知道。 –

1

好的,你的问题的答案分两部分,一个是你的绑定失败,然后提示的原因。 数据不显示的原因是因为在你的“listItems中的”类中的两个属性未正确申报,就需要充分利用申报getter和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)这样的框架,未来。

希望这会有所帮助。

+0

除了上面的内容:字段不是绑定源规范的一部分,您至少需要绑定到属性。欲了解更多信息,请参阅此处接受的答案http://stackoverflow.com/questions/3989965/why-cant-i-bind-to-a-field-on-a-class-in-wpf-instead-of-binding -to-A-属性 – FunksMaName