Benutzer mit den meisten Antworten
Wie referenziere ich ein Code-behind property in XAML?

Frage
-
Hallo zusammen,
ich habe ein Property in code-behind von a Window-Klasse MainWindow definiert:
private string TestProperty
{ get {return "Hallo"} }
und möchte nun das im selben Window-Klasse von einem XAML-Element referenzieren:
<TextBox Text= .... />
Einziges was ich gefunden habe ist Binding über RelativeSource:
<TextBox>
<TextBox.Text>
<Binding Path="TestProperty">
<Binding.RelativeSource>
<RelativeSource Mode="FindAncestor" AncestorType="{x:Type Window}"/>
</Binding.RelativeSource>
</Binding>
</TextBox.Text>
</TextBox>
Das ist in diesem Fall etwas übertrieben, da sich BindingSource ja nie ändert.
Wenn TestProperty als static deklriert wäre, könnte man ohne Binding auskommen:
<TextBox Text= {x:Static local:MainWindow.TestProperty}/>
Gibt's doch vielleicht eine ähnlich einfache Lösung für Instanzproperties?
Gruß
Efim
Antworten
-
Hallo Efim45,
du kannst nur auf public Properties binden.
Wenn du den DataContext von MainWindow auf this setzt brauchst du keine RelativeSource nur die normale Binding.
C#:
...
this.DataContext = this;
...
public string TextProperty { get; set; }
XAML:
<TextBox Text={Binding TestProperty} />
Du brauchst auch einen Setter, sonst kann die TextBox ja nichts zurückschreiben. Wenn du den Setter weglässt musst du beim Binden dann Mode=OneWay
einstellen sonst bekommst du eine Exception.
Hope that helps- Als Antwort vorgeschlagen Olaf Rabbachin Samstag, 26. Dezember 2009 13:30
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. Dezember 2009 16:17
Alle Antworten
-
Hallo Efim45,
du kannst nur auf public Properties binden.
Wenn du den DataContext von MainWindow auf this setzt brauchst du keine RelativeSource nur die normale Binding.
C#:
...
this.DataContext = this;
...
public string TextProperty { get; set; }
XAML:
<TextBox Text={Binding TestProperty} />
Du brauchst auch einen Setter, sonst kann die TextBox ja nichts zurückschreiben. Wenn du den Setter weglässt musst du beim Binden dann Mode=OneWay
einstellen sonst bekommst du eine Exception.
Hope that helps- Als Antwort vorgeschlagen Olaf Rabbachin Samstag, 26. Dezember 2009 13:30
- Als Antwort markiert Robert BreitenhoferModerator Sonntag, 27. Dezember 2009 16:17
-
Hallo Günter,
sorry für zu Spätsein mit meiner Reaktion und danke für den Hinweis auf DataContext-Löasung.
Ich frage mich aber grundsätzlich ob es ohne Binding geht, ähnlich zu static properties über eine Markup-Extension. Dann wäre es auch mit private Properties möglich gewesen was aus meiner Sicht innerhalb einer Klasse ganz legitim sein müsste. Oder sehe ich das grundlegend falsch?
Efim