Selon vos besoins, il peut y avoir une série d'approches différentes à prendre. Ce qui suit est une solution très générale.
Créer un convertisseur de valeur qui convertit une chaîne à un type: -
public class StringToTypeConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Type.GetType((string)value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Placez une instance de ce convertisseur dans le dictionnaire des ressources dont l'objet de destination a la visibilité, prononcez le App.xaml: -
<Application.Resources>
<local:StringToTypeConverter x:Key="STT" />
</Application.Resources>
maintenant dans votre XAML vous pouvez attribuer une valeur à une propriété comme celui-ci: -
<TextBox Text="{Binding Source='System.Int32,mscorlib', Converter={StaticResource STT}}" />
J'ai une exception quand je l'utilise sur un type personnalisé si je ne spécifie pas la version, mais votre solution semble être le meilleur que nous pouvons faire :( –
@Nicolas Dorier: Pour un type personnalisé, essayez simplement d'utiliser le nom de type seul (c'est-à-dire, au lieu d'ajouter un numéro de version, supprimez le nom de l'assembly). Si le type personnalisé est dans le même assembly que votre Xaml/Usercontrol qui utilise cette technique qui devrait fonctionner. – AnthonyWJones