Bonjour,
pour masquer un élément si une propriété est "null" il est possible d'utiliser le "Style" :
Maintenant supposons qu'il existe un deuxième control du même type ou d'un autre qui doit aussi avoir un comportement similaire, on fait alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <local:ControlTest> <local:ControlTest.Style> <Style TargetType="local:ControlTest"> <Style.Triggers> <DataTrigger Binding="{Binding Path=PropertyTest}" Value="{x:Null}"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </local:ControlTest.Style> </local:ControlTest>
Et ainsi de suite, le code est dupliqué partout où le comportement "masqué si une propriété est null" est utilisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <local:OtherControlTest> <local:OtherControlTest.Style> <Style TargetType="local:OtherControlTest"> <Style.Triggers> <DataTrigger Binding="{Binding Path=OtherPropertyTest}" Value="{x:Null}"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </local:OtherControlTest.Style> </local:OtherControlTest>
Comment factoriser ce comportement ?
Une possibilité semble être les propriétés attachées, mais est-il possible de les utiliser sans faire apparaitre d'élément supplémentaire dans le XAML, autre que la propriété sur les éléments cibles ?
Ce qui donnerait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <local:ControlTest HideOnNull.Object="{Binding Path=PropertyTest}" >...
Ou bien une solution plus lourde serait la création d'un conteneur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5<local:HideOnNull Object="{Binding Path=PropertyTest}"> <local:ControlTest> ... </local:ControlTest> </local:HideOnNull>
Quelles sont les solutions possibles, et laquelle vous parait la plus pertinente ?
Merci.
Partager