2017-03-25 2 views
3

J'essaye de créer un IValueConverter qui prend un enum et recrache un URI. Le convertisseur fonctionne à l'exécution comme prévu. Cependant, le concepteur XAML me jette une erreur en disant:IValueConverters et MockData

L'objet doit être du même type que l'enum. Le type transmis était 'Mocks.WarframeHelper_Model_Enumerations_15_1293735 + RelicTypes'; le type enum était 'WarframeHelper.Model.Enumerations + RelicTypes'.

J'ai une version plus simple de mon modèle avec les propriétés je ne ai besoin au moment de la conception, mais le enum utilisé est exactement la même (ou au moins devrait être). Y at-il de toute façon autour de cela.

Voici le code pour le IValueConverter (je suis juste obtenir le coup de ces choses si je fais quelque chose de mal ne hésitez pas à me corriger)

public class NameToUriConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(Enum.IsDefined(typeof(Enumerations.RelicTypes), value)) 
     { 
      return new Uri("/Assets/RelicIcons/Relic_" + (value).ToString() + ".png", UriKind.Relative); 
     } 
     else return new Uri("/Assets/Placeholder.png", UriKind.Relative); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value as string; 
    } 
} 

et est ici le type de données personnalisé que je utiliser pour les données fictives:

public class Sample_RelicModel 
{ 
    public Uri ImageUri { get; set; } 
    public bool isVaulted { get; set; } 
    public Enumerations.RelicFlavors Flavor { get; set; } 
    public Enumerations.RelicTypes Type { get; set; } 
    public Enumerations.DropRearity Rearity { get; set; } 
    public ObservableCollection<Sample_PrimeItem_Component> DropTable { get; set; } 
    private int count; 
    public int Count 
    { 
     get { return count; } 
     set 
     { 
      if (value >= 0) 
      { 
       count = value; 
      } 
      else MessageBox.Show("You don't have enough relics", "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
     } 
    } 
    public Sample_RelicModel() { } 
} 

Encore une fois le convertisseur fonctionne comme prévu lors de l'exécution mais le concepteur XAML ne l'aime pas à cause des données fictives.

+0

Le boîtier correspond-il? Jetez un oeil à la remarque ici https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs.110).aspx – Nkosi

+1

@Nkosi c'est le problème, ils ne correspondent pas. L'enum d'exécution est de type (Enumerations + RelicTypes) mais l'heure de conception est (Enumerations_15_1293735 + RelicTypes) d'où vient le problème. Je peux confirmer que le type de données Runtime et le datatype de conception ont tous les deux un 'using Project.Model' (où vit Enumerations), donc ce devrait être le même type sauf si visual studio crée son propre type de données basé sur celui J'ai créé –

+0

Je demandais sur le cas de la valeur transmise au convertisseur. À des fins de dépannage, essayez de convertir la valeur en chaîne avant de passer à 'Enum.IsDefined' et voyez si cela fonctionne. ie 'Enum.IsDefined (typeof (Enumerations.RelicTypes), value.ToString())' – Nkosi

Répondre