2011-01-22 18 views
0

ビューのイメージソースのビューモデルクラスから文字列プロパティをバインドします。 Stringプロパティは、男性の場合は1、女性の場合は2になります。私は画像ソースのuriを返すバインディングにもconverterを使用しています。ビューでイメージ変換元の変換なしの値変換器

私はこれを持っている:

<Image Style="{StaticResource InfoIcon}" 
      Source="{Binding ., Mode=OneWay,UpdateSourceTrigger=PropertyChanged, 
       Converter={StaticResource sexImgConverter}, 
       ConverterParameter=Oponent.Info.Sex}"/> 

変換方法はこちらです:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 

     const string woman = "/images/icons/chat/woman.png"; 
     const string man = "/images/icons/chat/man.png"; 

     string result = string.Empty; 

     string result = int.Parse(value.ToString()) == 1 ? man : woman; 

     return new Uri(result); 
    } 

問題は、私は文字列型である(ビューOponent.Info.Sex中)プロパティセックスを結合して、解析されます整数にする。

しかし、私はライン上debugerブレークポイントを追加した場合:

string resul = int.Parse(value.ToString()) == 1 ? man : woman; 

私はその価値が私の見解モデルクラスのタイプである参照してください。

私は、この変換方法に無い別のバインドを使用してみてください、ここにある:

<TextBlock Style="{StaticResource InfoText}"> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0}, {1} rokov"> 
      <Binding Path="Oponent.Info.Sex" Converter="{StaticResource sexConverter}"/> 
      <Binding Path= "Oponent.Info.Age"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

私は同じ最速を使用するライン上のdebugerブレークポイントを追加します。

string resul = int.Parse(value.ToString()) == 1 ? man : woman; 

私は価値がある見ます文字列のタイプ。

どうしたのですか?

答えて

1

Bindingのさまざまな部分がConvertメソッドのパラメータにどのように関係しているかは分かりません。ここでIValueConverter.Convertためのメソッドシグネチャを示します:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 

valueパラメータは、通常、targetプロパティに直接割り当てられますものですバインディングの値、から来ています。あなたのバインディングは、{Binding .}(ちょうど{Binding}に相当)を使用しています。これは現在のDataContextをソースとして使用し、パスを指定しないので、DataContextオブジェクトが値(この場合はView Modelクラス)になります。

バインディングで設定されたConverterParameterは、Convertメソッドのparameterパラメータとして表示されます。これはバインドされた値ではなく、固定値の型でなければなりません:文字列、x:静的オブジェクト参照、StaticResourceなどバインディングを宣言した方法は、文字列として解析される可能性が最も高いです。 Info.Sex "、これはブレークポイントでConvertメソッドのparameterとして表示されます。

マルチバインドで使用しているバインディングは、正しい場所のパラメータを使用しています。あなたのソースバインディングの代わりにこれを試してください(あなたのModeとUpdateSourceTriggerの設定は不必要です):

Source="{Binding Path=Oponent.Info.Sex, Converter={StaticResource sexImgConverter}}" 
+0

ありがとう、今私は理解しています:) –

関連する問題