Databinding innherhalb eines Custom Control

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Solaris.

    Databinding innherhalb eines Custom Control

    Hey ,

    die Situation ist wie folgt: Ich habe ein Custom Control, welches eine Erweiterung der ViewBase Klasse darstellt, um den View eines ListView zu verändern. Das klappt auch ganz gut. Jetzt habe ich eine DependencyProperty angelegt, welche die Größe der Elemente beeinflussen soll. Doch da haperts: Ich möchte jetzt diese Property in der Generic.xaml des Controls an die ItemWidth/Height Eigenschaft eines WrapPanels binden, doch mich begrüßt andauernd folgendes:

    System.Windows.Data Error: 40 : BindingExpression path error: 'ItemSize' property not found on 'object' ''VB$AnonymousType_1`3' (HashCode=-165864759)'. BindingExpression:Path=ItemSize; DataItem='VB$AnonymousType_1`3' (HashCode=-165864759); target element is 'WrapPanel' (Name='ItemsWrapPanel'); target property is 'ItemHeight' (type 'Double')

    Hier der betreffende Teil der XAML:

    XML-Quellcode

    1. <WrapPanel x:Name="ItemsWrapPanel" ItemWidth="{Binding ItemSize}" ItemHeight="{Binding ItemSize}" IsItemsHost="True" MinWidth="150" MinHeight="150"
    2. Width="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}">


    Und die DependencyProperty:

    Quellcode

    1. public static DependencyProperty ItemSizeProperty;
    2. static ImageView()
    3. {
    4. ItemSizeProperty = DependencyProperty.Register("ItemSize", typeof(double), typeof(ImageView));
    5. }
    6. public double ItemSize
    7. {
    8. get { return (double)GetValue(ItemSizeProperty); }
    9. set { SetValue(ItemSizeProperty, value); }
    10. }


    Jemand ne Idee, wie ich das lösen kann?

    MfG Solaris
    Binding-Picking funktioniert leider nicht, da sich das WrapPanel innerhalb eines Styles befindet. Aber ich habe so etwas auch schon vermutet, denn wenn ich die Propertys in einen separaten Style auslagere welcher im Root des Dokuments liegt, erhalte ich keinen Fehler. Leider ist diese Generic.xaml nur ein Resource Dictionary weshalb man das x:Name Attribut nicht zuweisen kann, welches man für {Binding Path=...} gebrauchen könnte... Hier noch mal der wichtige Abschnitt der XAML:

    XML-Quellcode

    1. <ResourceDictionary
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:l="clr-namespace:ExtendedFileViewer">
    5. <Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type l:ImageView},ResourceId=ImageView}"
    6. TargetType="{x:Type ListView}" BasedOn="{StaticResource {x:Type ListBox}}" x:Name="imgview">
    7. <Setter Property="BorderBrush" Value="Black"/>
    8. <Setter Property="BorderThickness" Value="0.5"/>
    9. <Setter Property="Template">
    10. <Setter.Value>
    11. <ControlTemplate>
    12. <Border Name="bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0"
    13. Background="{TemplateBinding Background}">
    14. <ScrollViewer>
    15. <WrapPanel x:Name="ItemsWrapPanel" ItemWidth="{Binding ItemSize}" ItemHeight="{Binding ItemSize}" IsItemsHost="True" MinWidth="150" MinHeight="150"
    16. Width="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}">
    17. </WrapPanel>
    18. </ScrollViewer>
    19. </Border>
    20. </ControlTemplate>
    21. </Setter.Value>
    22. </Setter>
    23. </Style>


    MfG Solaris
    Tja - ich weiß schon, warum ich Styles nicht mag.

    Du kannst das ControlTemplate doch direkt innerhalb einer ListView entwickeln - dort ist der Datacontext für den Xaml-Designer erkennbar, und dann funzt BindingPicking.

    Wenns passt, dann mw. das Template in den Style verlegen.

    Solaris schrieb:

    die Situation ist wie folgt: Ich habe ein Custom Control, welches eine Erweiterung der ViewBase Klasse darstellt, um den View eines ListView zu verändern. Das klappt auch ganz gut. Jetzt habe ich eine DependencyProperty angelegt, welche die Größe der Elemente beeinflussen soll.


    Diese XAML ist der Standard-Stil des Views. Der View (ImageView) wird von ViewBase abgeleitet, beinhaltet ItemSize als Dependency Property und ist insgesamt als Custom Control gekapselt.

    @ErfinderDesRades: Könnte ich, allerdings kann ich dann im späteren Programm nicht einfach den View des ListView Controls ändern um eine beispielsweise detailliertere Ansicht zu erhalten :/

    MfG Solaris