私が気付いたデータテンプレートについて読んでいるうちに、データの種類に基づいて異なるテンプレートを選択できます。 - しかし、別ののコンテンツののためにこれを行うことができますか?データの機能/内容に基づいて異なる要素にデータをバインドする
私のmodelviewは、データのリストを提供します。原則として、それは単にTuple<ImageData, AltText>
でタプル(カスタムクラスにバインドされて入力を簡単にする)のリストです。 のModelViewのプロパティのタイプは次のとおりです。
ReadOnlyObservableCollection<ThumbDispData>
ThumbDispData
で:
public class ThumbDispData
{
public ImageData Idhl { get; set; }
public string AltText { get; set; }
}
は今、私はそれが(ImageData.Source
が非ヌルである)ことができればImage
を表示したい - それ以外の場合は、表示されるはずです代替テキスト。
XAMLまたはUserControl:
<UserControl x:Class="test.ThumbPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:test="clr-namespace:test"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<DataTemplate DataType="{x:Type test:ThumbDispData}">
<TextBlock Text="{Binding AltText}"></TextBlock>
</DataTemplate>
</UserControl.Resources>
<Grid Background="Transparent">
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</UserControl>
まあのみ上記はALTテキスト(作品を)示しています。どのように私はThumbDispDataの内容に基づいて、セレクタを作成します。
私はこのようなアプローチを持っている最大の問題は、あなたが跳躍する前に見ているということです。イメージデータは本質的に揮発性です(ソースは壊れている/ 'Image'クラスが表示できないフォーマットを表しているかもしれません)ので、' Image'がソースを表示できる場合にのみデータトリガの方法はありませんか? – paul23
_ "Imageがソースを表示できるのであれば、データトリガの手段はありませんか?"しかし、あなたの質問はその具体的な例を提供するのに十分な文脈を提供していません。上記の例では、プロパティに対してユーザー定義型の 'ImageData'を使用していることを考慮していないことに注意してください。実際のコードでは 'Idhl'に直接バインドすることには疑問があります。イメージソースを別のタイプにラップしているようです。 –
しかし、基本的な考え方は同じです。データが有効かどうかを示す_some_プロパティをトリガし、有効な画像ソース(データが無効の場合はおそらく 'null ')に' Source'プロパティをバインドします。 –