我正在尝试创建一个IValueConverter,它接收一个枚举并输出一个URI。转换器在运行时按预期工作。然而,XAML设计器会报错:
对象必须与枚举相同。传入的类型为'Mocks.WarframeHelper_Model_Enumerations_15_1293735+RelicTypes',而枚举类型为'WarframeHelper.Model.Enumerations+RelicTypes'。
我有一个简化版的模型,其中只有我在设计时需要的属性,但是使用的枚举应该完全相同(或者至少应该是)。有没有什么办法解决这个问题。
下面是IValueConverter的代码(如果我做错了什么,请随便指正):
对象必须与枚举相同。传入的类型为'Mocks.WarframeHelper_Model_Enumerations_15_1293735+RelicTypes',而枚举类型为'WarframeHelper.Model.Enumerations+RelicTypes'。
我有一个简化版的模型,其中只有我在设计时需要的属性,但是使用的枚举应该完全相同(或者至少应该是)。有没有什么办法解决这个问题。
下面是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
之前将该值转换为字符串并查看是否有效。例如Enum.IsDefined(typeof(Enumerations.RelicTypes), value.ToString())
。 - Nkosi