MSDNでStyling and Templating を調べ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>
ここで私を助けてください。