2016-07-10 4 views
1

In Mainwindow ...WPF Ressource nicht reflektiert Änderungen von Code hinter

Ingredients allIngredients = this.FindResource("allIngredients") as Ingredients; 
allIngredients = (Ingredients)reader.Deserialize(file); 
foreach (Ingredient i in allIngredients) 
{ 
    ingredientListBox.Items.Add(i); 
} 

Die XML in mein Objekt fein deserialisiert, füllt das Listenfeld mit den Einzelteilen gut. Allerdings muss ich auch in der Lage sein, von einer anderen Methode innerhalb von MainWindow auf allIngredients zuzugreifen, und wenn ich eine andere FindResource in dieser Methode mache, ist alles, was ich habe, eine leere Liste. Ich habe Tests mit anderen FindResource-Situationen durchgeführt, und in diesen Situationen hat die Ressource alle vorgenommenen Änderungen widergespiegelt, unabhängig davon, von welcher Methode ich sie geändert habe. Dies scheint nur dann zu geschehen, wenn ich in die Ressource deserialisiere. Das Objekt wird gefüllt und funktioniert wie erwartet, aber nur in der Methode, die ich deserialize. Was könnte ich falsch machen?

Antwort

1

Dies passiert, weil Sie nicht die Instanz ändern, die im Ressourcenwörterbuch gespeichert ist, sondern ein neues Objekt erstellen (durch Deserialisierung) und nicht im Wörterbuch speichern.

Hier ist, wie Sie es tun sollten (Sie beachten Sie brauchen nicht einmal aus dem Wörterbuch lesen): (. Möglicherweise this im Code sein)

var allIngredients = (Ingredients)reader.Deserialize(file); 
element.Resources["allIngredients"] = allIngredients; 
foreach (Ingredient i in allIngredients) 
{ 
    ingredientListBox.Items.Add(i); 
} 

Dies setzt voraus, element ist, wo die Ressource gefunden

+0

Perfekt, das ist genau das, was ich brauchte. Vielen Dank! Ich habe 'this.FindResource (" allIngredients ") = allInredients versucht, aber das hat nicht funktioniert. –