2017-03-25 6 views
3

enum이 걸리고 URI가 울리는 IValueConverter을 만들려고합니다. 변환기는 예상대로 런타임에 작동합니다. 그러나 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; 
    } 
} 

이며, 여기에 사용자 정의 데이터 형식입니다 I 모의 데이터를 사용 : 런타임에 예상대로

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 그것이 문제는 아니지만 일치하지 않습니다. 런타임 열거 형은 (열거 형 + RelicTypes)이지만 디자인 타임은 열거 형 (열거 형 _15_1293735 + RelicTypes)으로 문제의 원인이됩니다. Runtime 데이터 형식과 디자인 타임 데이터 형식 둘 다 'Project.Model 사용'(열거 형이있는 위치)이 있으므로 Visual Studio에서 해당 형식을 기반으로 자체 데이터 형식을 만들지 않는 한 동일한 형식이어야 함을 확인할 수 있습니다. 나는 –

+0

을 만들었습니다. 변환기에 전달 된 값의 대소 문자를 묻습니다. 문제 해결을 위해서'Enum.IsDefined'에 전달하기 전에 값을 문자열로 변환하고 작동하는지 확인하십시오. 즉, 'Enum.IsDefined (typeof (Enumerations.RelicTypes), value.ToString())' – Nkosi

답변