我有这样的东西:
<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource x:Key="filteredSymbols" Source="{Binding Symbols ,RelativeSource={RelativeSource AncestorType=UserControl}}"
Filter="Symbols_CollectionViewSource_Filter" IsLiveFilteringRequested="True" >
<CollectionViewSource.LiveFilteringProperties>
<sys:String>DisplayPage</sys:String>
</CollectionViewSource.LiveFilteringProperties>
</CollectionViewSource>
</ResourceDictionary>
</UserControl.Resources>
...
<Border Background="{Binding Source={StaticResource filteredSymbols}, Converter={StaticResource MultiThresholdToReturnValueConverter}}" >
我试图将 ListCollectionView
传递给边框背景属性中的转换器,但它将继续传递 null。
我还尝试将 Path=.
添加到边框背景绑定(bind)中,但没有任何区别。
我错过了什么吗?
编辑:
我刚刚在 ListView
的 ItemsSource
上尝试了相同的绑定(bind),它将很好地将 ListCollectionView
对象传递给转换器,使用此代码:
<ListView ItemsSource="{Binding Source={StaticResource filteredSymbols}, , Converter={StaticResource MultiThresholdToReturnValueConverter}}" >
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="item" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
发生什么事了?
最佳答案
我找到了解决此问题的方法,方法是将资源设置为后面代码中的 DependencyProperty
并绑定(bind)到该资源,如下所示:
隐藏代码:
...
public static readonly DependencyProperty FilteredSymbolsProperty = DependencyProperty.Register(nameof(FilteredSymbols), typeof(CollectionViewSource), typeof(SymbolSummaryControl));
public CollectionViewSource FilteredSymbols
{
set { SetValue(FilteredSymbolsProperty, value); }
get { return (CollectionViewSource)GetValue(FilteredSymbolsProperty); }
}
public ctor()
{
InitializeComponent();
FilteredSymbols = (CollectionViewSource)this.Resources["filteredSymbols"];
Debug.Assert(FilteredSymbols != null);
}
...
然后使用绑定(bind):
Background="{Binding Path=FilteredSymbols.View, RelativeSource={RelativeSource AncestorType=UserControl}, Converter={StaticResource MultiThresholdToReturnValueConverter}}"
关于c# - 如何将 CollectionViewSource 传递给转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56165645/