2017-03-25 2 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; 
    } 
} 

であり、ここでカスタムデータ型である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は問題ですが、一致しません。実行時列挙型は(Enumerations + RelicTypes)ですが、設計時間は(Enumerations_15_1293735 + RelicTypes)で、問題の原因となります。私はランタイムデータ型とデザインタイムデータ型の両方が 'Project.Modelを使用しています'(Enumerationsが存在する場所)を持っていることを確認できます。したがって、Visual Studioがそれに基づいて独自のデータ型を作成しない限り私は –

+0

を作成しました。コンバータに渡された値の大文字小文字を質問していました。トラブルシューティングの目的で、値を文字列に変換してから、 'Enum.IsDefined'に渡して、動作するかどうか確認してください。つまり、Enum.IsDefined(typeof(Enumerations.RelicTypes)、value.ToString()) ' – Nkosi

答えて

関連する問題