我在视图中的视图源上绑定视图模型类的字符串属性。 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;
我看到值是字符串的类型。
我做错了什么?
答案 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}}"