是的,你可以。它的行爲與IValueConverter相同。您只需將Convert方法的值參數作爲集合處理即可。
這裏是一個集轉換器的一個例子:
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的經驗中,我建議使用像Factory Pattern這樣的東西來從ViewModel中的模型轉換並向後轉換。
謝謝,我認爲應該爲我工作,我會試試看。 – Grokodile