IValueConverters and MockData



我正在尝试创建一个IValueConverter,该采用enum并吐出URI。转换器确实按预期在运行时工作。但是,XAML 设计器向我搜索一个错误,说:

对象必须与枚举的类型相同。传入的类型是"Mocks.WarframeHelper_Model_Enumerations_15_1293735+遗物类型";枚举类型是"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 设计器不喜欢它。

在传递到Enum.IsDefined之前将value转换为字符串,只要枚举的大小写匹配,它应该可以工作。根据 https://msdn.microsoft.com/en-us/library/system.enum.isdefined(v=vs.110(.aspx

Enum.IsDefined(typeof(Enumerations.RelicTypes), value.ToString())

相关内容

  • 没有找到相关文章

最新更新