2017-03-25 3 views
3

Ich versuche, eine IValueConverter zu erstellen, die eine enum nimmt und einen URI ausspuckt. Der Konverter arbeitet zur Laufzeit wie erwartet. Der XAML-Designer gibt mir jedoch einen Fehler, der besagt:IValueConverters und MockData

Objekt muss vom gleichen Typ wie die Enumeration sein. Der übergebene Typ war 'Mocks.WarframeHelper_Model_Enumerations_15_1293735 + RelicTypes'; Der Aufzählungstyp war "WarframeHelper.Model.Enumerations + RelicTypes".

Ich habe eine einfachere Version meines Modells mit den Eigenschaften ich nur zur Design-Zeit benötigen, aber die enum verwendet wird, ist genau das gleiche (oder zumindest sein soll). Gibt es das überhaupt? Hier

ist der Code für die IValueConverter (ich gerade den Dreh dieser Dinge immer so, wenn ich etwas falsch mache mich an mich zu korrigieren)

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; 
    } 
} 

und hier ist der benutzerdefinierte Datentyp, die ich Verwendung für die Scheindaten:

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() { } 
} 

Auch der Wandler als zur Laufzeit jedoch die XAML Designer wegen der Mock-Daten nicht wie erwartet funktioniert.

+0

Passt das Gehäuse? Werfen Sie einen Blick auf die Anmerkungen hier https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs.110).aspx – Nkosi

+1

@Nkosi das ist das Problem, sie stimmen nicht überein. Die Laufzeit-Enumeration ist vom Typ (Enumerations + RelicTypes), aber die Entwurfszeit ist (Enumerations_15_1293735 + RelicTypes), wo das Problem herkommt. Ich kann bestätigen, dass sowohl der Runtime-Datentyp als auch der Entwurfszeit-Datentyp beide ein 'using Project.Model' haben (wo Enumerations lebt), also sollte es der gleiche Typ sein, es sei denn, Visual Studio erstellt seinen eigenen Datentyp basierend auf dem einen Ich erstellte –

+0

Ich fragte nach dem Fall des Werts an den Konverter übergeben. Versuchen Sie zur Fehlerbehebung den Wert in "string" zu konvertieren, bevor Sie an "Enum.IsDefined" übergeben werden, und prüfen Sie, ob es funktioniert. zB 'Enum.IsDefined (typeof (Enumerations.RelicTypes), value.ToString())' – Nkosi

Antwort

Verwandte Themen