是的,你可以。它的作用与 IValueConverter 相同。您只需将 Convert 方法的 value 参数视为一个集合。
这是一个集合的转换器示例:
public class DataConvert : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ObservableCollection<int> convertible = null;
var result = value as ObservableCollection<string>;
if (result != null)
{
convertible = new ObservableCollection<int>();
foreach (var item in result)
{
if (item == "first")
{
convertible.Add(1);
}
else if (item == "second")
{
convertible.Add(2);
}
else if (item == "third")
{
convertible.Add(3);
}
}
}
return convertible;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
在这种情况下只是一个概念证明,但我认为它应该很好地展示了这个想法。
转换器从一个简单的字符串集合转换,如下所示:
ModelItems = new ObservableCollection<string>();
ModelItems.Add("third");
ModelItems.Add("first");
ModelItems.Add("second");
成字符串含义对应的整数集合。
这里是对应的 XAML(loc 是当前程序集的引用,转换器在哪里):
<Window.Resources>
<loc:DataConvert x:Key="DataConverter"/>
</Window.Resources>
<Grid x:Name="MainGrid">
<ListBox ItemsSource="{Binding ModelItems, Converter={StaticResource DataConverter}}"/>
</Grid>
如果你想进行双向绑定,你还必须实现转换回来。从使用 MVVM 的经验来看,我建议使用工厂模式之类的东西来从 ViewModel 中的模型和向后转换。