WPF Data Binding

10/04/2009 - 23:43 von Ralf | Report spam
Hallo,

ich hab folgendes Problem mit dem WPF Data Binding:

Ich fülle eine ComboBox über ein DataBinding aus einer XML Datei mit Werten.

<ComboBox x:Name="comboBoxIPs" MinWidth="120" ItemsSource="{Binding
XPath=IPs/IP/@ID}" />
Diese Werten sind zum Filtern andere Werte.
Da ich auch alles anzeigen lassen möchte brauche ich noch zusàtzlich einen
Eintrag für Alle "All" in der ComboBox.
Wenn ich im Konstruktor oder bei den Events Loaded, Initialized oder
Activated einen Wert hinzufüge
bekomme ich immer eine Exception InvalidOperationException "Die
Items-Auflistung muss vor dem Verwenden von "ItemsSource" leer sein".

In der XML Datei kann ich keinen Wert "All" hinzufügen, da diese Datei fest
vorgegeben ist.

Ich brach eigentlich sowas wie:

<ComboBox x:Name="comboBoxIPs" MinWidth="120" ItemsSource="{Binding
XPath=IPs/IP/@ID}" >
<ComboBoxItem>All</ComboBoxItem>
</ComboBox>

Aber hier bekomme ich auch die oben angegebene Exception.


Gruß
Ralf
 

Lesen sie die antworten

#1 Frank Dzaebel
11/04/2009 - 09:15 | Warnen spam
Hallo Ralf,

<ComboBox x:Name="comboBoxIPs" MinWidth="120" ItemsSource="{Binding
XPath=IPs/IP/@ID}" />
Diese Werten sind zum Filtern andere Werte.
Da ich auch alles anzeigen lassen möchte brauche ich noch zusàtzlich
einen Eintrag für Alle "All" in der ComboBox.
[...] In der XML Datei kann ich keinen Wert "All" hinzufügen, da diese
Datei fest vorgegeben ist.



Brauchst Du ja auch nicht. Du kannst ja zum Beispiel
nach dem Laden am Anfang Dein "Alle" Element zufügen.
Hier ein Beispiel mit "Personen":

private XmlDocument document;

private void Window_Loaded(object sender, RoutedEventArgs e)
{
document = new XmlDocument();
document.Load("Personen.xml");
XmlNode alleNode = document.DocumentElement.FirstChild.Clone();
alleNode.Attributes["Nachname"].Value = "Alle"; // bei Dir "IP", o.à. ..
alleNode.Attributes["Vorname"].Value = "Alle";
XmlNode first = document.DocumentElement.FirstChild;
first.ParentNode.InsertBefore(alleNode, first);
XmlDataProvider dataProvider = new XmlDataProvider()
{
Document = document, XPath = "personen/person"
};
Binding binding = new Binding() { Source = dataProvider };
comboBoxIPs.SetBinding(ComboBox.ItemsSourceProperty, binding);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen