没有绑定图像源的值转换器 - 转换

时间:2011-01-22 13:58:26

标签: wpf image binding converter

我在视图中的视图源上绑定视图模型类的字符串属性。 String属性的值为1,男性为2​​,女性为2。我还使用转换器进行绑定,返回uri作为图像源。

在视图中我有这个:

    <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>

我在线上使用相同的remter add debuger断点:

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

我看到值是字符串的类型。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

看起来你混淆了Binding的不同部分与Convert方法参数的关系。这是IValueConverter.Convert的方法签名:

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

value参数来自Binding的值,该值通常直接分配给目标属性。在您的情况下,您的Binding使用{Binding .}(相当于{Binding}),它使用当前的DataContext作为源,并指定无路径,因此导致DataContext对象作为您的值(在本例中为您的View模特类)。

Binding中设置的ConverterParameter在Convert方法中显示为parameter参数。这不是绑定值,需要是某种类型的固定值:字符串,x:静态对象引用,StaticResource等。您声明绑定它的方式很可能被解析为字符串:“Oponent。 Info.Sex“,你应该在断点处看到转换方法中的parameter

您在MultiBinding中使用的绑定是在正确的位置使用参数。请尝试使用此源代码进行绑定(不需要Mode和UpdateSourceTrigger设置):

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