使用Silverlight中的数据填充列表框,哪种方式?

时间:2010-04-08 19:13:25

标签: silverlight silverlight-3.0

哎哟,我已经做了几年的asp.net,一年的asp.net mvc,现在:silverlight。 感觉再次像新手一样。

我想用数据项填充列表框,还不够公平吗? 我想要显示图像名称和图像。

这是我到目前为止看到的: 使用虚拟数据创建数据源,并将集合绑定到列表框(设计时)。 Beldn创建一个datatemplate,并显示虚拟数据。但那么,在运行时使用真实数据创建一个新的数据源并绑定那个数据源?

或者两个:使用MVVM。创建一个具有ObservableCollection类型属性的对象,并让列表框和属性合作。只听说过这个,所以不知道如何实现它:)

或者第三:在后面的代码中输入所有内容:获取数据,创建listboxitems,将它们添加到列表框中(也可以对布局进行硬编码,不需要XAML)

我必须说第三个选项很简单,因为听起来很熟悉,而另外两个选项与我的观点有很大不同,我不知道从哪里开始。

我想补充一点:我看过一些银色视频,他们都是在Blend中完成的,所以我在Blend看到的第一个,我读过的第二个,第三个是我知道的要做。

长话故事,如果你能伸出援助之手,我会很感激。

1 个答案:

答案 0 :(得分:1)

你应该使用选项二 - MVVM是要走的路。 基本步骤是这样的:
1)定义你的类,从INotifyPropertyChanged派生

public class MyImage : INotifyPropertyChanged
{
    public string ImagePath { ... }
    public bool IsChecked { ... }       
}

2)为类定义数据模板,以便ListBox知道如何显示项目

<ListBox>
   <ListBox.temTemplate>
      <Setter.Value>
         <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <CheckBox Source="{Binding IsChecked}"/>
              <Image Source="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
     </Setter.Value>
   </Setter>
</ListBox>

4)制作一个可观察的集合并用你的班级实例填充

public class DataModel : INotifyPropertyChanged
{
    public ObservableCollection<MyImage> MyItems{...}
}
....
public class MyWindow : Page
{
    public MyWindow ()
    {
        this.DataContext = new DataModel( ); 
    }
}

5)将列表框的ItemsSource属性绑定到集合

<ListBox ItemsSource="{Binding MyItems}>
   <ListBox.temTemplate>
      <Setter.Value>
         <DataTemplate>
            <StackPanel Orientation="Horizontal">
              <CheckBox Source="{Binding IsChecked}"/>
              <Image Source="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
     </Setter.Value>
   </Setter>
</ListBox>

你应该check out this tutorial on ScottGu's Blog