J'ai un ListBox
qui se lie à une collection enfant sur un ViewModel. Les éléments de la zone de liste sont stylisés dans un modèle de données basé sur une propriété du ViewModel parent:
<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>
J'obtiens l'erreur de sortie suivante:
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')
Donc, si je change l'expression de liaison, "Path=DataContext.CurrentItem.CurveSpeedMustBeSpecified"
cela fonctionne, mais seulement tant que le contexte de données du contrôle utilisateur parent est un BindingListCollectionView
. Cela n'est pas acceptable car le reste du contrôle utilisateur se lie aux propriétés du CurrentItem
sur le BindingList
automatiquement.
Comment puis-je spécifier l'expression de liaison à l'intérieur du style afin qu'elle fonctionne indépendamment du fait que le contexte de données parent soit une vue de collection ou un élément unique?