2017-07-26 7 views
2

Ich versuche, eine DependencyObject zu erstellen, die von Xaml erstellt wird. Es hat eine DependencyProperty vom Typ List<object> wie so definiert:Wie definiere ich eine `DependencyProperty` für einen Sammlungstyp in UWP?

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:

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

I Cannot add instance of type 'UwpApp.Xaml.TextPair' to a collection of type 'System.Collections.Generic.List<Object> immer erhalten. Was kann diesen Fehler verursachen? Vielen Dank.

+1

Die Ursache dieses Fehlers ist einfach: Sie haben die 'Eigenschaft' vom Typ 'Liste ' definiert und einen Wert vom Typ 'TextPair' gesetzt, der nicht der richtige Typ ist. – Fruchtzwerg

+0

@Fruchtzwerg, ich habe es versucht, aber es scheitert immer noch. –

+0

Ich bin verwirrt, weil ich keinen Vorschlag gemacht habe. Also, was hast du probiert? – Fruchtzwerg

Antwort

5

Sie haben den Typ Ihres DependencyProperty mit typeof(List<object>) definiert. Dies bedeutet, dass die Eigenschaft genau diesen Typ benötigt. Da List<object> nicht ein TextPair ist, müssen wir generischer sein. Verwenden Sie anstelle eines speziellen generischen Listentyps einfach IList als Typ und fügen Sie new List<object>() als Standardwert hinzu. Dies sollte dein Problem lösen.

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: Sieht aus wie UWP ein bisschen anders als WPF verhält. Um diesen Code in UWP auszuführen, müssen Sie den generischen Typ IList<object> anstelle von IList als Eigenschaftstyp verwenden.

+1

Das ist es. Auch wenn Sie '[ContentProperty (Name = Name von (Map))]' auf Ihre 'MyConverter' Klasse setzen, können Sie' 'von Ihrem XAML entfernen. –

+0

Ich erhalte 'XamlCompiler Fehler WMC0015: Kann 'TextPair' nicht zuweisen Eigenschaft 'Map', Typ muss zu 'IList' zugeordnet werden –

+2

@AndriyShevchenko versuchen,' IList' in 'IList ' zu ändern. –

Verwandte Themen