2017-03-25 14 views
3

我想创建一个IValueConverter需要一个enum并吐出一个URI。转换器按照预期在运行时工作。然而,XAML设计器给我一个错误说:IValueConverters和MockData

对象必须是与枚举相同的类型。传入的类型是'Mocks.WarframeHelper_Model_Enumerations_15_1293735 + RelicTypes';枚举类型是'WarframeHelper.Model.Enumerations + RelicTypes'。

我有我与我只需要在设计时的属性模型的简化版本,但使用的enum是完全一样的(或至少应该是)。有没有办法解决。

下面是IValueConverter(我刚刚起步的那些东西的窍门,所以如果我做错了什么随时纠正我)的代码

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

,这里是自定义数据类型,我使用模拟数据:

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

同样在运行时预期的转换器的工作原理,不过XAML的设计师不喜欢它,因为模拟数据。

+0

套管是否匹配?看看这里的言论https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs.110).aspx – Nkosi

+1

@Nkosi这是问题,他们不匹配。运行时枚举类型为(Enumerations + RelicTypes),但设计时间为(Enumerations_15_1293735 + RelicTypes),这是问题的来源。我可以确认Runtime数据类型和设计时间数据类型都有'using Project.Model'(这是Enumerations所在的地方),所以它应该是相同的类型,除非Visual Studio创建它自己的基于数据类型的数据类型我创建 –

+0

我问的是传递给转换器的值的情况。出于故障排除的目的,请在传递给'Enum.IsDefined'之前将值转换为字符串,然后查看它是否有效。即'Enum.IsDefined(typeof(Enumerations.RelicTypes),value.ToString())' – Nkosi

回答

相关问题