Converter with Dependency Properties

后端 未结 2 799
情书的邮戳
情书的邮戳 2021-01-24 10:35

I have problems implementing a custom DependencyObject:

I need a converter which sets or unsets a enum flag in a bound property. Therefore I created a IValueConverter d

相关标签:
2条回答
  • 2021-01-24 11:26

    A converter is not a FrameworkElement so it should not inherit from that class, at best use DependencyObject.

    Since the converter is not in any tree that binding will not work, you can try:

    <converters:EnumerationConverter x:Key="EnumerationConverter" x:Shared="False"
                                     Flag="{Binding}"
                                     Flags="{Binding Path=Value, Source={x:Reference EnumerationEditor}}"/>
    

    (However this should be placed in the Resources of the UserControl and referenced, otherwise the x:Reference will cause a cyclical dependency error.)

    Note that the Flag binding tries to bind to the DataContext which might not work as the DataContext may not be inherited for the same reasons that ElementName and RelativeSource will not work.

    0 讨论(0)
  • 2021-01-24 11:29

    Conclusion

    I decided to solve the problem using two UserControls; FlagControl and EnumerationEditorControl.

    The FlagControl has two dependency properties

    • Flag (System.Enum): Determines which flag is set/cleared by the control
    • Value(System.Enum): Bound to the propery/value in which the flag is set/cleared.

    The EnumerationEditorControl has one dependency property:

    • Value(System.Enum): The propery/value in which flags are set.

    The EnumerationEditorControl uses a DataTemplate to instantiate FlagControls. The DataTemplate binds the FlagControl.Flag property to the DataContext and the FlagControl.Value property to the EnumerationEditorControl.Value property.

    This way I don't need a converter and logic is clearly separated.

    Thanks for the suggestions, comments and replies!

    0 讨论(0)
提交回复
热议问题