Laden...

Frage zu Binding eines DataTemplate zu ItemTemplate

Erstellt von mikefried vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.185 Views
M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren
Frage zu Binding eines DataTemplate zu ItemTemplate

Hallo an Alle!

ich komme einfach nicht weiter! Ich versuche eine einfache Bindung von einem DataTemplate an sein Parent herzustellen. Hier mal mein code:



    <DataTemplate x:Key="centralTile">
    
        <Border SnapsToDevicePixels="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="5" 
                BorderBrush="{DynamicResource _SolidColorBrush_darkcolor}" Margin="2,5,5,5" CornerRadius="5"  >

            <DockPanel x:Name="testtest"
                Height="{TemplateBinding ItemHeight}" 
                Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemWidth}"  
                       
                       Background="{DynamicResource _SolidColorBrush_darkcolor}" Margin="-1,0,-1,0" LastChildFill="True" >
                <Grid  HorizontalAlignment="Center" x:Name="ImageGrid"  DockPanel.Dock="Top">
                    <Image  
                      MaxHeight="150"                   
                      Source="{Binding Path=FullPath}" Margin="6,6,15,6"/>
            </Grid>
                
            <TextBlock Text="{Binding Path=Name}" FontSize="13" DockPanel.Dock="Bottom"
                     HorizontalAlignment="Center" Margin="10,0,10,10" />
                
            <Grid  >    <!--dummy-->
   
    </Grid>
            </DockPanel>
        </Border>
    </DataTemplate>





    <local:CPlainView x:Key="tileView" x:Name="tileView_PV"
                   ItemTemplate="{StaticResource centralTile}"                     
                   ItemWidth="300" ItemHeight="200"/>



Mein CPlainView Objekt tileview_PV bekommt als ItemTemplate das DataTemplate mit dem Namen centralTile. In diesem DataTemplate habe ich ein DockPanel mit dem Namen testtest. Nun versuche ich die Breite und die Höhe dieses DockPanels an die ItemWidth und ItemHeight von tileView_PV zu binden. Nur kann ich es nicht.

Wie muss so ein Binding den aussehen ?
Mit einem einfachen{Binding ElementName=tileView_PV, Path=ItemWidth} ging es auch nicht.

Für Eure Hilfe schon mal vielen Dank!

MFG Mike

1.378 Beiträge seit 2006
vor 12 Jahren

Probier mal folgendes:

{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemWidth}

Lg, XXX

M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren

sorry, aber das funktioniert auch nicht

ich habe es kopiert



 <DockPanel x:Name="testtest"
                Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}}, Path=ItemHeight}"
                Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CPlainView}},  Path=ItemWidth}"  


es kommt aber immer noch ne Fehlermeldung

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='...............

Danke aber trotzdem

M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren

er schreibt in der Fehlermeldung was von AncestorLevel='1''...

Der Vorfahre von testtest ist doch aber die Border?

1.378 Beiträge seit 2006
vor 12 Jahren

Ich schaffs nicht auf nur irgendeine Weise deinen Fehler nachzustellen.

Was ist local:CPlainView für ein Control?
Ist ItemTemplate ein eigenes Property? Wenn ja wie definiert und wo und wie verwendet?

Lg, XXX

//PS: Der Fehler sagt eigentlich eh schon alles aus und drückt auch meine Vermutung aus: In deiner Objekthierachie ist anscheinend vom DockPanel bis zum Window rauf nirgends ein Element vom Typ CPlainView dazwischen. Zumindest bekomm ich nur in solchen Fällen diesen Fehler.

M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren

ja CPlainView ist ein Control



 public class CPlainView : ViewBase
    {

        public static readonly DependencyProperty
          ItemContainerStyleProperty =
          ItemsControl.ItemContainerStyleProperty.AddOwner(typeof(CPlainView));

        public Style ItemContainerStyle
        {
            get { return (Style)GetValue(ItemContainerStyleProperty); }
            set { SetValue(ItemContainerStyleProperty, value); }
        }

        public static readonly DependencyProperty ItemTemplateProperty =
            ItemsControl.ItemTemplateProperty.AddOwner(typeof(CPlainView));

        public DataTemplate ItemTemplate
        {
            get { return (DataTemplate)GetValue(ItemTemplateProperty); }
            set { SetValue(ItemTemplateProperty, value); }
        }

        public static readonly DependencyProperty ItemWidthProperty =
            WrapPanel.ItemWidthProperty.AddOwner(typeof(CPlainView));

        public double ItemWidth
        {
            get { return (double)GetValue(ItemWidthProperty); }
            set { SetValue(ItemWidthProperty, value); }
        }


        public static readonly DependencyProperty ItemHeightProperty =
            WrapPanel.ItemHeightProperty.AddOwner(typeof(CPlainView));

        public double ItemHeight
        {
            get { return (double)GetValue(ItemHeightProperty); }
            set { SetValue(ItemHeightProperty, value); }
        }


        protected override object DefaultStyleKey
        {
            get
            {
                return new ComponentResourceKey(GetType(), "myPlainViewDSK");
            }
        }

    }

M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren

Der PlainView ersetzt in meinem ListView.View den standard Gridview!

1.378 Beiträge seit 2006
vor 12 Jahren

Ich kann nicht erklären warum, aber irgendwie wird die View "wegrationalisiert" oder so und ist anscheinend im VisualTree nicht vorhanden weswegen sie mit RelativeSource nicht aufspürbar ist.

Was aber gehen sollte ist zuerst die ListView suchen und dann über die View Eigenschaft wieder runterhangeln:

{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=View.ItemWidth}

Lg, XXX

M
mikefried Themenstarter:in
198 Beiträge seit 2010
vor 12 Jahren

Hallo xxxprof!

Ja das hat funktioniert. Danke noch mal, ohne deinen Tipp hätte ich es nicht hinbekommen.

MFG Mike