J'ai une simple classe d'objet, qui ressemble à ceci:Mon databinding avec convertisseur de valeur ne fonctionne pas
public class Item : DependencyObject
{
public int No
{
get { return (int)GetValue(NoProperty); }
set { SetValue(NoProperty, value); }
}
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
public static readonly DependencyProperty NoProperty = DependencyProperty.Register("No", typeof(int), typeof(Item));
public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Item));
}
Et ValueConverter, qui ressemble à ceci:
[ValueConversion(typeof(Item), typeof(string))]
internal class ItemToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return null;
}
var item = ((Item)value);
var sb = new StringBuilder();
sb.AppendFormat("Item # {0}", item.No);
if (string.IsNullOrEmpty(item.Name) == false)
{
sb.AppendFormat(" - [{0}]", item.Name);
}
return sb.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
sur ma fenêtre WPF, je déclare un DependencyProperty (appelé Items) qui contient une liste d'objets Item (Liste < Item>) et crée un ComboBox qui lie à cette DependencyProperty en utilisant ce code XAML:
<ComboBox ItemsSource="{Binding ElementName=mainWindow, Path=Items}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource itemToStringConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Si j'exécute le code ci-dessous une fois, la liaison de données fonctionne très bien, howevery la convertion de valeur échoue si je l'exécute à nouveau:
var item1 = new Item {Name = "Item A", No = 1};
var item2 = new Item {Name = "Item B", No = 2};
var item3 = new Item {Name = "Item C", No = 3};
Items = new List<Item> {item1, item2, item3};
Le problème est que la méthode ItemToStringConverter.Convert est maintenant adopté une chaîne -object comme premier paramètre au lieu d'un objet-objet?
Qu'est-ce que je fais mal?
Cordialement, Kenneth
C'est exactement ce que j'ai fait jusqu'ici, mais je voulais vraiment savoir pourquoi la méthode Convert a été appelée avec une valeur de chaîne :) – kennethkryger