2017-07-26 6 views
2

Xamlから作成されたDependencyObjectを作成しようとしています。私はCannot add instance of type 'UwpApp.Xaml.TextPair' to a collection of type 'System.Collections.Generic.List<Object>を受信し続けるUWPのコレクションタイプに `DependencyProperty`を定義する方法は?

 <MyConverter x:Key="myConverter"> 
      <MyConverter.Map> 
       <TextPair First="App.Blank" Second ="App.BlankViewModel"/> 
      </MyConverter.Map> 
     </MyConverter> 

public List<object> Map 
    { 
     get { return (List<object>)GetValue(MapProperty); } 
     set { SetValue(MapProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Map. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty MapProperty = 
     DependencyProperty.Register("Map", typeof(List<object>), typeof(MyConverter), new PropertyMetadata(null)); 

XAML: それはそうのように定義されたタイプList<object>DependencyPropertyを持っています。 このエラーの原因は何ですか?ありがとうございました。

+1

このエラーの原因は簡単です: 'List '型の 'Property'を定義し、正しい型ではない' TextPair'型の値を設定しました。 – Fruchtzwerg

+0

@Fruchtzwerg、私はあなたのsuggetionを試しましたが、それでも失敗します。 –

+0

私は何の示唆もしなかったので、私は混乱しています。あなたは何を試しましたか? – Fruchtzwerg

答えて

5

DependencyPropertyのタイプをtypeof(List<object>)と定義しました。これは、プロパティがこの型を正確に必要とすることを意味します。 List<object>は ではないので、TextPairより一般的である必要があります。特殊な汎用リストタイプを使用する代わりに、タイプとしてIListを使用し、デフォルト値としてnew List<object>()を追加してください。これはあなたの問題を解決するはずです。

public IList Map 
{ 
    get { return (IList)GetValue(MapProperty); } 
    set { SetValue(MapProperty, value); } 
} 

public static readonly DependencyProperty MapProperty = 
    DependencyProperty.Register("Map", typeof(IList), 
     typeof(MyConverter), new PropertyMetadata(new List<object>())); 

EDIT: UWPがWPFよりも少し異なる振る舞いのように見えます。 UWPでこのコードを実行するには、プロパティタイプとしてIListの代わりにIList<object>ジェネリックを使用する必要があります。

+1

これはそれです。また、 '[ContentProperty(Name = nameof(Map)]'を 'MyConverter'クラスに置くと、xamlから' 'を取り除くことができます。 –

+0

'XamlCompilerのエラーが発生しました。WMC0015:プロパティ 'Map'に 'TextPair'を割り当てることはできません。タイプは 'IList'に割り当て可能でなければなりません。 –

+2

@AndriyShevchenkoはIListをIList に変更しようとします。 –

関連する問題