2016-11-03 26 views
1

我有一个ListView的DataContext被设置为我的ViewModel。 ListView.ItemsSource被设置为ViewModel的Collection属性。在这个ViewModel上有一个名为MyIndex的属性。 MyIndex的值在执行我的项目期间发生变化。如何从XAML的ListView.ItemTemplate中引用ListView DataContext?

我需要一种从ListView的ItemTemplate中访问XAML'MyIndex'的方法,以便我可以根据MyIndex的值更改每个ListViewItem的方面。

我无法使用TemplatedParent,然后将ListViewItem的.Parent属性作为.Parent作为.Parent不是ListView。

下面是一些伪XAML来更好地说明我的意思。

  <ListView ItemsSource="ItemsCollection"> 
 
       <ListView.ItemTemplate> 
 
        <ItemContainerTemplate> 
 
         <Grid Background="{Binding <some xaml to reference MyIndex Property of ListView.DataContext to use in Converter>}"> 
 

 
         </Grid> 
 
        </ItemContainerTemplate> 
 
       </ListView.ItemTemplate> 
 
      </ListView>

我不跟WPF经历,所以我希望这是有道理的。

非常感谢您的任何帮助。

+0

为什么'MyIndex'不是数据项类的属性? – Clemens

+0

@Clemens,MyIndex表示我想要更改其背景的特定ListViewItem的索引。因此,由于MyIndex更改相应的ListViewItem的背景并且之前的ListViewItem返回到其旧背景。我认为XAML会这样做,但不是。相反,它会更改所有ListViewItems。 – Cleve

回答

2

这应该是诀窍。这样,您可以在子级中使用父级的DataContext。

 <ListView ItemsSource="ItemsCollection"> 
     <ListView.ItemTemplate> 
      <ItemContainerTemplate> 
       <Grid Background="{Binding DataContext.MyIndex, RelativeSource={RelativeSource AncestorType=ListView}}"> 

       </Grid> 
      </ItemContainerTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
+0

嗨Lupu Silviu,谢谢你的回应。我无法确认这是否有效。我已经改变了绑定到你如何说。我可以看到代码进入我的ValueConverter,它接受MyIndex属性。转换器返回一个Colors.Red,但是绑定发生的网格背景不会改变。 – Cleve

+1

@Cleve因为Background属性的类型是'Brush',所以你的转换器应该返回一个Brush,而不是Color,例如'Brushes.Red'。 – Clemens

+0

@Clemens,谢谢! – Cleve

相关问题