2013-04-03 4 views
8

у меня есть следующий случай:связывают со свойством родительского контроля

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

теперь я хочу, чтобы отобразить в LabelID индекс строки в ListView. так я сделал следующее:

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

и для лейбла я иметь следующее:

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

но LabelID только показывает 0 .. поэтому я думаю, что TemplatedParent не указывает на ListView control. так как я могу исправить привязку, чтобы указать на «верхний родитель», который в моем случае ListView?

заранее спасибо

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

Update: здесь полный 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> 

ответ

15

пожалуйста, попробуйте следующее:

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

Update: вот Corret XAML, связывание должно быть relativae источника = ListViewItem, но возникла проблема с шириной столбца сетки:

<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

no, did not work ... cant посмотреть, как это будет работать, если iam ищет в ListViewItem вместо самого ListView! ?? – lebhero

+0

отредактировал мой ответ, работал для меня! вы должны обратиться к этому элементу, потому что вам нужен каждый индекс предмета – user1064519

+0

извините, это не сработало для меня ... – lebhero

3

Вы можете использовать

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

найти определенный контроль над вами

+0

привет, это не решило проблему, теперь ярлык ничего не показывает в ней. – lebhero

+0

Я также попытался указывать на список, используя ElementName и üath, но также не работал .. – lebhero

1

Ну, так как вы находитесь в контексте DataTemplate, вы не можете получить доступ к этому свойству через режим TemplatedParent, по крайней мере, в вашем случае. Он относится к элементу, к которому применяется шаблон (в котором существует элемент, связанный с данными). [...]Link Я не уверен, что он может быть использован в DataTemplate, потому что я только видел его в ControlTemplates, но так как документы не говорят иначе ...

Что вы можете сделать чтобы попытаться найти Ancestor. Например.

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

я не использовал в DataTemplates еще, поэтому никаких гарантий.

+0

did not work :(... любые другие решения на как это сделать? – lebhero

Смежные вопросы