Sí, puedes. Está actuando de la misma manera que con IValueConverter. Simplemente trata el parámetro de valor para el método Convert como una colección.
Aquí es un ejemplo de convertidor para una colección:
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();
}
}
En este caso es sólo una prueba de concepto, pero creo que debe mostrar muy bien la idea. El convertidor convierte desde una simple colección de cadenas como esto:
ModelItems = new ObservableCollection<string>();
ModelItems.Add("third");
ModelItems.Add("first");
ModelItems.Add("second");
en una colección de números enteros que corresponden al significado cadena.
Y aquí es el XAML correspondiente (loc es la referencia de los conjuntos actual en la que es el convertidor):
<Window.Resources>
<loc:DataConvert x:Key="DataConverter"/>
</Window.Resources>
<Grid x:Name="MainGrid">
<ListBox ItemsSource="{Binding ModelItems, Converter={StaticResource DataConverter}}"/>
</Grid>
Si desea hacer una doble vía de unión, hay que aplicar también al convertir de nuevo . A partir de la experiencia de trabajar con MVVM, sugiero usar algo como el Patrón de fábrica para transformarlo de Modelo en ViewModel y viceversa.
Gracias, creo que debería funcionar para mí, lo intentaré. – Grokodile