Laden...

Eigenschaftswert aus übergeordnetem Element übernehmen

Letzter Beitrag vor 8 Jahren 5 Posts 1.468 Views
Eigenschaftswert aus übergeordnetem Element übernehmen

Hallo,
ich habe einige Radiobuttons deren Inhalt nur aktiviert sein soll (Textboxen etc.), wenn der Button ausgewählt wurde. Wenn ich für jeden Radiobutton eine Eigenschaft im Viewmodel bereitstellen und dann daran binden ist das sehr viel sich wiederholender Code. Wie kann man das besser lösen?

Du kannst beim Binding eine RelativeSource einen sog. Ancestor suchen.

Beispiel:

{Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type TypeOfAncestorControl}}}

Oder Du gibst dem Control einen Namen und setzt bei dem Binding dann die ElementName-Property.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Naja, der Ausgewählte RadioButton ist ja auch an einen Boolean gebunden ( IsChecked).
Den kann man ruhig zweimal benutzen.

ich behandele eine Gruppe von Radiobuttons immer als Listbox. Also wesentlich daran ist nicht "IsChecked", sondern eine Art "SelectedItem" der gesamten Gruppe - und mehr wird im Viewmodel auch nicht persistiert.
Muss man bisserl Logik für schreiben, dass für alle Items ein "SelectedItem" im Viewmodel existiert, und darüber hinaus braucht man in der Item-Klasse eine Property "IsSelected", die sich mit dem SelectedItem aller Items vergleicht.

Hoffe, die Konzept-Erklärung geht so, ansonsten in
BindingPicking oder MVVM-Pattern-DataContext-und-DataTemplates der jeweilige Sample-Code hat sone Logik - allerdings für TreeViews - aber Prinzip dasselbe, nur bisserl komplizierter.

Der frühe Apfel fängt den Wurm.

Ist das nicht viel zu Oversized?

Was er möchte ist doch schlussendlich nur das (was Palladin007 schon kurz angeschnitten hat):

<RadioButton Margin="4" Content="Option 1" x:Name="_radioButton1" />
<TextBox IsEnabled="{Binding ElementName=_radioButton1, Path=IsChecked}" />

<RadioButton Margin="4" Content="Option 2" x:Name="_radioButton2" />
<TextBox IsEnabled="{Binding ElementName=_radioButton2, Path=IsChecked}" />