我在 MSDN 上探索DataTemplate
并找到了样式和模板。它说 -
"在这个示例应用程序中,有一个绑定到照片列表的 ListBox 控件:
<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>
此 ListBox 当前如下所示: "
//...一些关于DataTemplate
...的东西//
在我们的示例应用程序中,每个自定义Photo
对象都有一个Source
字符串类型的属性,用于指定图像的文件路径。目前,照片对象显示为文件路径。"
"要使照片显示为图像,您可以创建一个 DataTemplate 作为资源: "
<Window.Resources>
...
<!--DataTemplate to display Photos as images
instead of text strings of Paths-->
<DataTemplate DataType="{x:Type local:Photo}">
<Border Margin="3">
<Image Source="{Binding Source}"/>
</Border>
</DataTemplate>
...
</Window.Resources>
好的,很公平,所以我声明了 Photo 类 -
public class Photo
{
public string Source { get; set; }
}
我的 XAML 感觉不是很好(实际上很糟糕)。我在这里没有得到的是ListBox 的ItemsSource的设置方式。就我的 XAML 而言,这里的“MyPhotos”必须是Photo 类型 x:Key
的IEnumerable对象,例如 -
<Window.Resources>
...
<local:PhotoList x:Key="MyPhotos"/>
...
</Window.Resources>
但我不知道在这种情况下PhotoList类应该是什么样子。那么,导致 ListBox 填充照片字符串的 Resource实际上是什么样子的呢?Source
仅供参考:以我自己的方式实现事物,我的DataTemplate
探索取得了成功,虽然这不是我最关心的事情,但我只想知道我不知道的事情。任何人都可以解释一下吗?
编辑以回应 H.B.提供的答案。:
问题的重点是在应用 DataTemplate 之前获得结果,如图所示,并了解实现这一目标的资源。
如果我将其PhotoList
本身设为 IEnumerable,例如 -
public class PhotoList : List<Photo>
{
//some property to hold the collection of Photo objects??
}
并在资源中实例化它,然后实际绑定到什么?ItemsSource
它将如何运作?对不起,我不明白。我希望你能详细说明这一点。
所以,我DataSourceProvider
选择了。但由于该Data
属性没有设置器,我尝试了以下 -
public class Photo
{
public string Source { get; set; }
}
public class PhotoList : DataSourceProvider
{
private List<Photo> _photos;
public PhotoList()
{
_photos = new List<Photo>
{
new Photo{ Source = @"D:\AppImage\1.jpg"},
new Photo{ Source = @"D:\AppImage\2.jpg"},
new Photo{ Source = @"D:\AppImage\3.jpg"},
new Photo{ Source = @"D:\AppImage\4.jpg"},
new Photo{ Source = @"D:\AppImage\5.jpg"},
};
((List<Photo>)this.Data).AddRange(_photos);
}
}
而且我肯定做错了什么。因为,现在我在资源中实例化时收到无法创建“PhotoList”实例错误消息PhotoList
-
<Window.Resources>
<local:PhotoList x:Key="MyPhotos"/>
</Window.Resources>
请帮帮我。