我目前有一个带有HasChanges属性的集合(集合中的每个对象也有自己的HasChanges属性),集合是我的CollectionViewSource的源。
当我尝试将CollectionViewSource后面的集合的HasChanges属性数据绑定到我的一个自定义控件时,它会绑定到当前所选对象的HasChanges属性,而不是CollectionViewSource的源集合的HasChanges属性。有没有办法可以明确告诉绑定查看集合对象而不是集合中的对象?
我的代码看起来像这样:
<Window x:Class="CollectionEditWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Local="clr-namespace:My.Local.Namespace;assembly=My.Local.Namespace">
<Window.Resources>
<CollectionViewSource x:Name="CVS" x:Key="MyCollectionViewSource" />
</Window.Resources>
<Local:MyCustomControl HasChanges="{Binding HasChanges, Source={StaticResource
MyCollectionViewSource}}">
<!-- Code to set up the databinding of the custom control to the CollectionViewSource-->
</Local:MyCustomControl>
</Window>
感谢。
答案 0 :(得分:2)
当您绑定到CollectionViewSource时,您会得到一个CollectionView,它具有SourceCollection属性,您可以使用该属性来获取CollectionViewSource后面的集合,如下所示:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid.Resources>
<x:Array x:Key="data" Type="{x:Type sys:String}">
<sys:String>a</sys:String>
<sys:String>bb</sys:String>
<sys:String>ccc</sys:String>
<sys:String>dddd</sys:String>
</x:Array>
<CollectionViewSource x:Key="cvsData" Source="{StaticResource data}"/>
</Grid.Resources>
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource cvsData}}"/>
<TextBlock Text="{Binding Source={StaticResource cvsData}, Path=Length, StringFormat='{}Length bound to current String = {0}'}"/>
<TextBlock Text="{Binding Source={StaticResource cvsData}, Path=SourceCollection.Length, StringFormat='{}Length bound to source array = {0}'}"/>
</StackPanel>
</Grid>