Laden...

ItemsControl: Template Datenbindung an Property ausserhalb der Source

Erstellt von BJA-CH vor 5 Jahren Letzter Beitrag vor 5 Jahren 917 Views
B
BJA-CH Themenstarter:in
59 Beiträge seit 2017
vor 5 Jahren
ItemsControl: Template Datenbindung an Property ausserhalb der Source

Hallo zäme
Ich habe ein ItemsControl, bei dem ich die darzustellenden Daten in einem ObservableControl<> übergebe.
Nun möchte ich aber, einige Darstellungsattribute, wie Strichdicke, Farbe usw. durch den Benutzer steuern lassen. Dazu habe ich in der aufrufenden MVVM-Klasse die entsprechenden Properties bereitgestellt.
Nun möchte ich eine Datenbindung in einige ausgewählte DataTemplate machen. Ich denke das müsste mit RelativeSource FindAncestor zu machen sein, doch das bekomme ich einfach nicht hin.
Ich habe es bis jetzt wie folgt versucht:

        <DataTemplate DataType="{x:Type kli:itemsSternbild}">
            <Line Stroke="{Binding Path=SternbildColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vm:MainWindowViewModel}}}" StrokeThickness="{Binding Path=Thickness}"
                  X1="{Binding Path=X1}" Y1="{Binding Path=Y1}" X2="{Binding Path=X2}" Y2="{Binding Path=Y2}"
                  Visibility="{Binding ElementName=starBilderAnzeige , Path=IsChecked, Converter={StaticResource boolToVisibilityConverter}}"
                  ToolTipService.IsEnabled="{Binding ElementName=sternToolTip, Path=IsChecked}">

wobei "SternbildColor" das Property wäre und dieses liegt in der Hauptdatei "vm:MainWindowViewModel".

Weiss da jemand Rat??

3.170 Beiträge seit 2006
vor 5 Jahren

Hallo,

über RelativeSource FindAncestor fndest Du für gewöhnlich Controls, nicht aber die ViewModels.
Das ViewModel müsste aber als DataContext im Control (bei Dir: im Window, wenn Deine Bezeichnungen stimmen) zu finden sein.
Das Binding müsste also so aussehen (beachte den Path und den Ancestortype):

<Line Stroke="{Binding Path=DataContext.SternbildColor, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}"/>

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

B
BJA-CH Themenstarter:in
59 Beiträge seit 2017
vor 5 Jahren

Hallo MarsStein
Super, habe ich verstanden und hat auch geklappt!
Besten Dank