Ceci est une erreur étrange. Je lie une énumération à une zone de liste déroulante et affiche l'attribut de description. J'utilise la solution au WPF Binding a ListBox to an enum, displaying the Description Attribute. Ainsi, la partie pertinente de mon XAML est:NullReferenceException avec IValueConverter lors de la connexion via le bureau à distance
<Window.Resources>
<local:EnumConverter x:Key="EnumConverter"/>
<ObjectDataProvider MethodName="GetValues"
ObjectType="{x:Type local:MyEnum}"
x:Key="MyEnumValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:MyEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<ComboBox Name="MyComboBox" ItemsSource="{Binding Source={StaticResource MyEnumValues}}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Alors mon code est:
public enum MyEnum
{
[Description("foo")]
Foo,
[Description("bar")]
Bar
}
public class EnumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
FieldInfo field_info = value.GetType().GetField(value.ToString());
object[] attributes = field_info.GetCustomAttributes(false);
if (attributes.Length == 0)
return value.ToString();
else
{
DescriptionAttribute attribute = attributes[0] as DescriptionAttribute;
return attribute.Description;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Maintenant la partie bizarre. Je démarre le programme et sélectionne une valeur dans la liste déroulante (cette étape est importante). Tout fonctionne comme prévu. Ensuite, je me connecte à l'ordinateur via le bureau à distance. Immédiatement, j'obtiens une exception NullReferenceException sur la première ligne de la fonction Convert()
. Le paramètre Type
est une chaîne, mais sinon il n'y a pas beaucoup d'informations à résoudre et la pile d'appels est vide.
Ajoutez une déclaration de débogage là et dites-nous, c'est l'objet ou est-ce la valeur qui est nulle? Regardez ensuite la trace de la pile et travaillez en arrière pour découvrir pourquoi. Quel est le type d'objet? –
@JohnPeters L'argument 'value' de la fonction' Convert() 'est null et provoque l'exception. 'EnumConverter.Convert()' est la seule chose dans la trace de la pile. –
Ok, les convertisseurs sont appelés au moment du rendu WPF, alors quel est le type d'objet? Pouvez-vous montrer la partie XAML .... et la collection de liaison? –