XAML Binding Fehler?

Palladin007  18.05.2023, 23:58

Und wie sieht die Property im ViewModel aus?

Suiram1 
Fragesteller
 18.05.2023, 23:59
public ObservableCollection<EquationModel> Equations = new();

Ist als ganz normale Property definiert.

1 Antwort

Von Experte FaTech bestätigt
public ObservableCollection<EquationModel> Equations = new();

Das ist keine Property, sondern eine normale Variable.

Richtig wäre:

public ObservableCollection<EquationModel> Equations { get; } = new();

Oder eine der vielen anderen Schreibweisen einer Property.

Es gibt auch Properties mit Expression Body:

public ObservableCollection<EquationModel> Equations => new();

Nur ein Zeichen Unterschied zu deinem Code, leider sehr missverständlich. Allerdings würde das bei dir sowieso nicht funktionieren, da Du dann bei jedem Mal abrufen eine neue ObservableCollection hast und keine Änderung erhalten bleibt.

Die Property mit Expression Body wird technisch so umgesetzt:

public ObservableCollection<EquationModel> Equations
{
    get { return new(); }
}

Kannst Du dir auch hier angucken, die Seite solltest Du dir direkt speichern:

https://sharplab.io/#v2:EYLgtghglgdgPgAQEwEYCwAoBAGABAlAOgGEB7AG3IFMBjAFylJgGdCB5YAK1roFlSAJlXIBuTJgQBmfElzFMAb0y4V+aR2ZUATgDcIwamUo9GMADwBRAI4BXCAyb8h5AHy5rdhy1wBeNzCoAdwAKAEoxDABfcSxpZHdbe1MnYVwFXEigA==

Was die Seite dir zeigt, heißt "Lowering", der Compiler formt erst einiges am Code um. Viele Sprach-Funktionen sind nur solcher "Compiler-Zucker". Die Seite liefert dir das Ergebnis, was am Ende tatsächlich kompiliert wird.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler
Suiram1 
Fragesteller
 19.05.2023, 00:24

Danke für den Hinweis dass das eine Normale Variable ist und es ist mir bekannt das man Properties auch so machen kann und jedoch löst das leider noch nicht mein Problem. Wenn ich die Variable zu einer Property mache (egal ob mit oder ohne setter) kommt ein neuer Fehler: XDG0066 "Binding" kann nicht innerhalb einer UIElementCollection-Sammlung verwendet werden. "Binding" kann nur für eine DependencyProperty eines DependencyObject festegelegt werden.

0
Palladin007  19.05.2023, 00:35
@Suiram1

Der Fehler scheint nicht in dem Code zu liegen, den Du hier zeigst.

Entferne man das ItemTemplate, wenn der Fehler nicht mehr auftritt, weißt Du, wo Du suchen musst.

1
Suiram1 
Fragesteller
 19.05.2023, 00:39
@Palladin007

Vielen Dank der Fehler ist jetzt weg. Der Fehler war anscheinen innerhalb des Templates

0