Ich habe eine ListBox
, die an eine untergeordnete Sammlung auf einem ViewModel bindet. Die Listbox Elemente werden in einem Datatemplate basierend auf einem Grundstück auf der übergeordneten Ansichtsmodell gestylt:Zugriff Eltern DataContext von DataTemplate
<Style x:Key="curveSpeedNonConstantParameterCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.CurveSpeedMustBeSpecified,
ElementName=someParentElementWithReferenceToRootDataContext}"
Value="True">
<Setter Property="Control.Visibility" Value="Hidden"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
ich die folgende Ausgabe Fehlermeldung erhalten:
System.Windows.Data Error: 39 : BindingExpression path error:
'CurveSpeedMustBeSpecified' property not found on
'object' ''BindingListCollectionView' (HashCode=20467555)'.
BindingExpression:Path=DataContext.CurveSpeedMustBeSpecified;
DataItem='Grid' (Name='nonConstantCurveParametersGrid');
target element is 'TextBox' (Name='');
target property is 'NoTarget' (type 'Object')
Also, wenn ich die die Bindung Ausdruck zu "Path=DataContext.CurrentItem.CurveSpeedMustBeSpecified"
es funktioniert ändern , aber nur so lange, wie der Datenkontext des übergeordneten Benutzersteuerelements BindingListCollectionView
ist. Dies ist nicht akzeptabel, da der Rest des Benutzersteuerelements automatisch an die Eigenschaften des CurrentItem
auf dem BindingList
bindet.
Wie kann ich den Bindungsausdruck im Stil angeben, so dass er unabhängig vom übergeordneten Datenkontext funktioniert, der eine Sammlungsansicht oder ein einzelnes Element ist?
Ich habe diesen genauen Code in meinem Projekt, aber es ist ViewModels undicht (Finalizer nicht aufgerufen, scheint Command Bindung DataContext zu behalten). Können Sie überprüfen, ob dieses Problem auch für Sie besteht? –
@Juve das funktioniert, aber ist es möglich, dies zu tun, so dass es für alle itemsControl ausgelöst würde, die die gleiche Vorlage implementieren? Der Name ist eindeutig, so dass wir für jedes eine separate Vorlage benötigen, es sei denn, mir fehlt etwas. – Chris
@Juve missachten meine letzte, ich habe es durch die Verwendung von Verwandten Quelle mit Findancestor und Suche nach Ahnortyp zu arbeiten, (also alle gleich, außer nicht nach Namen suchen). In meinem Fall wiederhole ich die Verwendung von ItemsControls, die jeweils eine Vorlage implementieren, sodass meine so aussieht: Command = "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x: Type ItemsControl}}, Path = DataContext.OpenDocumentBtnCommand}" – Chris