Fügen Sie dem wpf-Ressourcenwörterbuch eine Sammlung oder ein Array hinzu

8

Ich habe hoch und niedrig gesucht und kann keine Antwort darauf finden. Ich habe zwei Fragen

  1. Wie erstellen Sie ein Array oder eine Sammlung in XAML? Ich habe ein Array, das ich dort festhalten und an eine Combobox binden möchte. Meine erste Idee war, ein ItemsControl in ein Ressourcenwörterbuch zu stellen, aber die ItemsSource eines Kombinationsfelds erwartet IEnumerable, so dass es nicht funktionierte.

Folgendes habe ich in meinem Ressourcenwörterbuch versucht und funktioniert auch nicht

%Vor%

und so bin ich daran gebunden

%Vor%

BEARBEITEN: AKTUALISIERT

Ich habe diesen ersten Teil, der so funktioniert

%Vor%

Allerdings würde ich lieber keine Array-Liste verwenden, ich würde gerne eine generische Liste verwenden. Wenn jemand weiß, wie bitte, lassen Sie es mich wissen.

EDIT UPDATE: Ich schätze, XAML hat nur sehr eingeschränkte Unterstützung für Generics. Vielleicht ist eine Array-Liste das Beste, was ich jetzt tun kann, aber ich möchte immer noch Hilfe zur zweiten Frage, wenn jemand einen Anser hat.

2. Ich habe versucht, ein verschmolzenes Ressourcenwörterbuch in meinem XAML zu referenzieren und hatte Probleme, weil ich unter Window.resources mehr als nur das Wörterbuch hatte, also verlangte es mich, x: Key hinzuzufügen. Sobald ich den Schlüssel hinzugefügt habe, kann das System die Elemente in meinem Ressourcenwörterbuch nicht mehr finden. Ich musste stattdessen das zusammengeführte Wörterbuch zu Grid.Resources verschieben. Im Idealfall möchte ich auf das zusammengeführte Wörterbuch in der app.xaml verweisen, aber ich habe das gleiche Problem

Hier ist ein Beispielcode. Dieser erste Teil benötigt einen x: Schlüssel zum kompilieren, weil ich einen Konverter habe und er beschwert hat, dass jedes Element einen Schlüssel haben muss, wenn es mehr als ein

gibt %Vor%

Ich musste es zu diesem ändern

%Vor%

Danke

    
Chris Cap 19.03.2010, 16:01
quelle

4 Antworten

14

Soweit ich Ihr Problem verstehe, möchten Sie eine ComboBox (oder eine ListBox) mit einem Array von Elementen verknüpfen, oder? Wenn Sie Elemente aus einer externen Datenquelle möchten, können Sie einfach die praktische DataContext-Eigenschaft verwenden. Suchen Sie in MSDN nach mehr darüber. Wenn Sie jedoch eine manuelle Sammlung wünschen, tun Sie dies folgendermaßen:

Erstellen Sie Ihre eigene Klasse:

%Vor%

und jetzt benutze es so:

%Vor%

Oder, wenn Sie eine allgemeinere Sammlung wünschen, erstellen Sie eine Klasse wie diese:

%Vor%

und benutze es so:

%Vor%



Sie können auch einige eingebaute Klassen wie Int32Collection verwenden, die IEnumerable implementieren. Sie können sie direkt als Ressource verwenden.

Die Eigenschaft Resources (von beliebig FrameworkElement wie Window , UserControl oder Application ) hat den Typ ResourceDictionary not collection von Ressourcenwörterbüchern! Du kannst also nicht so machen:

%Vor%

Stattdessen wie folgt:

%Vor%

Hoffe, das hilft.
Grüße,
Mihir Gokani

    
mg007 19.03.2010, 17:27
quelle
1

Bitte korrigieren Sie mich, wenn ich falsch liege, aber ich denke, dass Sie so etwas wollen?

%Vor%

Am oberen Rand Ihres Fensters haben Sie eine Eigenschaft:

%Vor%

Und in deinem Code hättest du:

%Vor%

Die Bindung würde auf einem Steuerelement mit einer Eigenschaft wie diesem erfolgen:

%Vor%     
Brian R. Bondy 19.03.2010 16:13
quelle
1

Für die Ressourcen müssen Sie nur Ihren zusätzlichen Konverter in das neu deklarierte ResourceDictionary verschieben:

%Vor%     
Abe Heidebrecht 19.03.2010 17:11
quelle
0

Wenn Sie ein Ressourcenwörterbuch in Windows-Ressourcen hinzufügen, können Sie nicht überall darauf zugreifen. Stattdessen sollten Sie die Ressourcen von "App" hinzufügen (siehe App.xaml-Datei).

%Vor%

Dies ist in jedem WPF-Objekt unabhängig von der Erstellung einer Vererbungshierarchie verfügbar.

    
Akash Kava 19.03.2010 16:46
quelle

Tags und Links