2013-04-03 22 views
8

i aşağıdaki durum var:bağlamak

Window 
    |_Grid 
     |_ListView (MainProductGrid) 
      |_View 
       |_GridView 
        |_GridViewColumn 
          |_CellTemplate 
            |_DataTemplate 
              |_Label (LabelID) 

şimdi, ben LabelID içinde ListView satırın indeksini görüntülemek ister. yüzden yapılan şu: yüzden TemplatedParent işaret etmiyor düşünüyorum ..

<Label x:Name="LabelID" 
     Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, 
     Path=(ListView.AlternationIndex)}"/> 

ama LabelID sadece 0 gösteriyor:

<ListView ItemsSource="{Binding Path=ProductItems}" AlternationCount="{Binding Path=ProductItems.Count}"> 
... 

ve etiket için ben var aşağıdaki ListView denetimi .. Yani benim durumumda ListView olan "üst ebeveyn" işaret etmek için bağlama düzeltebilirsiniz? peşin

sayesinde

################

Güncelleme: Burada tam xaml ...

<Grid x:Name="mainGrid"> 
     <ListView ItemsSource="{Binding Path=ProductItems}" AlternationCount="{Binding Path=ProductItems.Count}" x:Name="MainProductGrid"> 
       <ListView.View> 
        <GridView AllowsColumnReorder="False"> 
        <GridViewColumn x:Name="gvc" Header="id" Width="auto"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Label Content="{Binding (ListView.AlternationIndex),RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Product name" DisplayMemberBinding="{Binding Path=ProductName}" Width="auto" /> 
        </GridView> 
       </ListView.View> 
      </ListView> 
    </Grid> 

cevap

15

bu deneyin:

<Label Content="{Binding (ListView.AlternationIndex), 
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" /> 

Güncelleme: Burada corret xaml olduğu, kaynak = ListViewItem relativae olmalıdır bağlama, henüz ızgara sütun genişliği olan bir sorun vardı:

<ListView.View> 
      <GridView AllowsColumnReorder="False"> 
       <GridViewColumn x:Name="gvc" Header="id" Width="30"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding (ListView.AlternationIndex), 
           RelativeSource={RelativeSource FindAncestor, 
            AncestorType={x:Type ListViewItem}}}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

       <GridViewColumn Header="Product name" 
           DisplayMemberBinding="{Binding Path=ProductName}" 
           Width="auto" /> 
      </GridView> 
     </ListView.View> 
+1

hayır, işe yaramadı ... ListViewItem yerine ListView kendisini arıyorum iam ne işe yarayacağını göremiyorum! – lebhero

+0

cevabımı düzenledim, benim için çalıştı! Her öğe endeksi – user1064519

+0

özür dilerim, çünkü benim için işe yaramazsa öğeye başvurmalısınız ... – lebhero

3

kullanabilirsiniz edilir

RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}} 

yukarıdaki belirli denetim bulmak için

+0

merhaba, bu hiç şimdi etiket ben de üzerine :(... başka çözümler elementName ve Uath değil, aynı zamanda hiç bir çalışma .. – lebhero

+0

gösteriyor, sorunu çözmek nasıl yapılır? – lebhero

1

Bir DataTemplate bağlamında olduğunuzdan, en azından sizin durumunuza göre TemplatedParent modu aracılığıyla tesise erişemezsiniz. , şablonun (veriye bağlı öğenin var olduğu) uygulandığı öğeye karşılık gelir. [...] Ben sadece ControlTemplates içinde gördüm çünkü DataTemplate kullanılabilir, ancak dokümanlar aksi söylemiyorlar çünkü o, emin değilimLink ...

Ne yapabilirsiniz Ancestor'u bulmaya çalışmaktır. Örneğin.

<Label Content="{Binding AlternationIndex, 
     RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}" ... /> 

Ben henüz DataTemplates kadar hiçbir garanti kullanılan vermedi.

+0

hiç bir çalışma kullanarak liste görünümü işaret çalıştı herhangi bir husus .. – lebhero

İlgili konular