のコレクションを含むビューモデルがありItem Attributes
、それぞれに画像へのパスが含まれています。0 .. N
コレクション内のアイテム属性のどこかにある可能性があります。
私のビューのスタック パネルには、3 つの同一のイメージ コントロールが含まれています。各イメージ コントロールは、アイテム属性イメージのパスにバインドされます。
- 画像コントロール 1 は、1 番目の項目属性の画像パス (ItemAttributes[0].Image にあります) にバインドされます。
- 画像コントロール 2 は、2 番目の項目属性の画像パス (ItemAttributes 1 .Image にあります)にバインドされます。
- 画像コントロール 3 は、3 番目の項目属性の画像パス (ItemAttributes[2].Image にあります) にバインドされます。
3 つ以上の属性がある場合、それらは無視されます。0 ~ 2 個の属性 (1 つ以上のイメージ コントロールが null にバインドされることを意味します) を持つ可能性に対処するために、この投稿に記載されているエラーが発生するため、次のようなデータ トリガーを追加しました。
<DataTrigger Binding="{Binding Attribute1}" Value="{x:Null}">
<Setter Property="Source" Value="{x:Null}"/>
</DataTrigger>
また、インデックスの範囲外の問題を防ぐために、ビュー モデルのアイテム属性を 3 つのプロパティに分割しました (最初は String.Empty を返していましたが、データ トリガーで動作するように null に変更しました)。
public string Attribute1
{
get { return _item.Attributes.Count > 0 ? _item.Attributes[0].Image : null; }
}
public string Attribute2
{
get { return _item.Attributes.Count > 1 ? _item.Attributes[1].Image : null; }
}
public string Attribute3
{
get { return _item.Attributes.Count > 2 ? _item.Attributes[2].Image : null; }
}
したがって、私の問題は、このデータトリガーを3つの画像属性すべてと対応する画像コントロール(幅、高さ、マージンなどの他のプロパティとともに)で機能させたいということです。だから、それをスタイルに入れて、静的リソースとして参照すると思います。異なる名前 (Attribute1、Attribute2、Attribute3) を持つ 3 つの異なるプロパティがある場合、これは機能しません。だから今、私はこのようにして立ち往生しています:
<Image>
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{Binding Attribute1}" />
<Setter Property="Width" Value="44" />
<Setter Property="Height" Value="45" />
<Setter Property="Margin" Value="5" />
<Style.Triggers>
<DataTrigger Binding="{Binding Attribute1}" Value="{x:Null}">
<Setter Property="Source" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
これは、Attribute1 が Attribute2 と Attribute3 に置き換えられることを除いて、他の 2 つのイメージ コントロールに対して繰り返されます。
それで、代わりにコレクションにバインドする方法があるかどうか疑問に思っていました。
<DataTrigger Binding="{Binding Attributes}" Value="{x:Null}">
<Setter Property="Source" Value="{x:Null}"/>
</DataTrigger>
...そして、テンプレートの外側で、イメージ コントロール バインディングに関心のあるインデックスを指定します (パラメータをデータ トリガーに渡すようなものだと思います)。
任意のアイデア...これが不可能な場合、別のアプローチはありますか?