13

私はこのlistBoxを持っています。各項目は、listBoxにバインドされている「SEX」プロパティに応じて男性または女性のいずれかになります。(男性は「M」、女性は「F」のいずれかになります)...

各項目について、リスト項目の SEX プロパティに基づいて男性または女性のシンボルを表示したいと思います。

たとえば、「{Binding SEX}」が「M」に等しい場合:

<Image Source="../Images/male48.png" Visibility="Visible" />

「{Binding SEX}」が「F」に等しい場合:

<Image Source="../Images/female48.png" Visibility="Visible" />

これを機能させるにはどうすればよいですか?

4

3 に答える 3

17

この問題への一般的なアプローチは、値コンバーターを作成することです。これは、バインディングによって返された値を、UI コントロールのプロパティに関連する他の値に変換します。

性別を取得して画像ソースにマップするコンバーターを作成できます。

public class SexToSourceConverter : IValueConverter
{
  public object Convert(object value, string typeName, object parameter, string language)
  {
     string url = ((string)value == "M") ? "../Images/male48.png" :  "../Images/female48.png";
    return new BitmapImage(new Uri(url , UriKind.Relative));
  }

  public object ConvertBack(object value, string typeName, object parameter, string language)
  {
    throw new NotImplementedException();
  }
}

XAML で次のように使用します。

<Image Source="{Binding Path=Sex, Converter={StaticResource SexToSourceConverter }" />
于 2012-07-09T12:58:38.977 に答える
4

誰かがこれがどのように機能するかに興味がある場合は、ColinEの回答に基づいて解決策を作成しました。まず、XAML コードに追加する条件を含む新しいクラスを作成する必要があります。

public class MyNiceConverterName : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        // Your conditions here!
        return value_you_want_to_return; // E.g., a string, an integer and so on
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException(); // Leave this like here, don't worry
    }
}

必要に応じてクラスを呼び出し (現在は と呼ばれています) 、XAML ファイルに追加する条件を指定しMyNiceConverterNameてメソッドを実装します。Convert()を使用している型にキャストすることを忘れないでくださいobject value(たとえば、(int)value整数の場合)。

これでほぼ完了です!ただし、まだ、XAML でコンバーターをリソースとして宣言します。このコードを名前空間宣言の下に貼り付けることができます。

<Control.Resources>
    <converter:MyNiceConverterName xmlns:converter="clr-namespace:My_Namespace" x:Key="MyNiceConverterName" />
</Control.Resources>

クラスを定義した名前空間を宣言し (つまり、自分の名前で削除My_Namespace)、名前MyNiceConverterNameを自分のクラス名に変更する必要があります。キーは、XAML ドキュメント内でコンバーターを参照するために定義された名前になります。ここでは同じクラス名を使用しましたが、自由に変更できます。

最後に、コンバーターを使用します。これを入れて完了です:

{Binding variable_with_value, Converter={StaticResource MyNiceConverterName}}

variable_with_valueバインディング内で使用したいものに変更することを忘れないでください。

それが役立つことを願っています!

于 2013-10-03T13:41:34.573 に答える
2

バインディング コンバーターを使用するか、2 つのトリガーを使用します。

Siverlightの場合、これは正しい IValueConverter リンクです。トリガーがサポートされているかどうかはわかりません。

于 2012-07-09T12:54:33.147 に答える