我正在使用wpf + mvvm并且正在尝试实现条件转换器。这是我在xaml中所做的:
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource pageSourceConverter}">
<Binding Path="CurrentPage.Source"/>
<Binding Path="Project.Type1.MachineTypes.Rotating"/>
<Binding Path="Project.Type2.MachineTypes.Rotating" />
<Binding Path="Project.Type3.MachineTypes.Rotating" />
<Binding Path="Project.Type4.MachineTypes.Rotating" />
</MultiBinding>
</CheckBox.IsChecked>
MultiConverter:
public class PageSourceConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
String pageSource = values[0] as String;
if (pageSource == "Type1")
return values[1];
else if (pageSource == "Type2")
return values[2];
else if (pageSource == "Type3")
return values[3];
else if (pageSource == "Type4")
return values[4];
else
return null;
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
return null;
}
}
所以我想做的是根据用户所在的页面类型,有条件地将页面上的元素绑定到viewController中的不同模型。
我需要为转换做什么?我不知道如何判断值属于返回数组中的哪个元素。有什么想法吗?
答案 0 :(得分:1)
使用MultiValueConverter
看起来像对我的滥用,你没有使用所有输入,你只需选择一个,正常ValueConverter
将{4}对象作为ConverterParameter
可能更有意义,这样你就不需要在ConvertBack
中为它们返回值。
此外ConvertBack
在逻辑上是不可能的。绑定到IsChecked
这是一个布尔/可空布尔值,当你的输入有四种状态(不同类型)时,它会给你两个或三个状态,所以你的转换函数从四个值映射到两个或三个。对此不能有反函数。