我想用数据项填充列表框,还不够公平吗? 我想要显示图像名称和图像。
这是我到目前为止看到的: 使用虚拟数据创建数据源,并将集合绑定到列表框(设计时)。 Beldn创建一个datatemplate,并显示虚拟数据。但那么,在运行时使用真实数据创建一个新的数据源并绑定那个数据源?
或者两个:使用MVVM。创建一个具有ObservableCollection类型属性的对象,并让列表框和属性合作。只听说过这个,所以不知道如何实现它:)
或者第三:在后面的代码中输入所有内容:获取数据,创建listboxitems,将它们添加到列表框中(也可以对布局进行硬编码,不需要XAML)
我必须说第三个选项很简单,因为听起来很熟悉,而另外两个选项与我的观点有很大不同,我不知道从哪里开始。
我想补充一点:我看过一些银色视频,他们都是在Blend中完成的,所以我在Blend看到的第一个,我读过的第二个,第三个是我知道的要做。
长话故事,如果你能伸出援助之手,我会很感激。
答案 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>