gpt4 book ai didi

wpf - 在 DataTemplate 中绑定(bind) CollectionViewSource

转载 作者:行者123 更新时间:2023-12-02 03:01:28 24 4
gpt4 key购买 nike

“ContentTemplate”是一个 DataTemplate,它显示一个具有成员“FooList”(ObservableCollection)的对象。

<DataTemplate x:Key="ContentTemplate">
<ListBox ItemsSource="{Binding Path=FOO}">
...
</ListBox>
</DataTemplate>

我需要能够使用 CollectionViewSource 过滤 FooList。这通常是直接的,但我似乎无法让绑定(bind)在 DataTemplate 中工作。我尝试这样做:

<DataTemplate x:Key="ContentTemplate">
<DataTemplate.Resources>
<CollectionViewSource x:Key="CVS" Source="{Binding Path=FooList}" Filter="FooFilter"/>
<DataTemplate.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource CVS}}">

我从中得到的错误是:

System.Windows.Data 错误:2:找不到目标元素的控制 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=FooList;数据项=空;目标元素是“CollectionViewSource”(HashCode=52991666);目标属性是“源”(类型“对象”)

这听起来像是它在 CollectionViewSource 上寻找“FooList”,而不是绑定(bind)到 DataTemplate 的对象。

那么...我如何让它看到正确的对象?

最佳答案

据我了解,DataTemplate 充当向可视化树中插入内容的指令,但不会成为可视化树本身的一部分。我是在遇到您上面描述的相同问题后才得出这个假设的。我通过将 CollectionViewSource 附加到属于可视化树的元素(在我的例子中是网格)的资源来解决这个问题。这是有效的示例:

<DataTemplate DataType="{x:Type TypedLists:AssetModelListViewModel}">
<Grid>
<Grid.Resources>
<CollectionViewSource x:Key="items"
Source="{Binding}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="AssetType.AssetCategory.Name" />
<scm:SortDescription PropertyName="AssetType.Name" />
<scm:SortDescription PropertyName="Manufacturer.Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Grid.Resources>

<ListView ItemsSource="{Binding Source={StaticResource items}}">

</ListView>
</Grid>
</DataTemplate>

关于wpf - 在 DataTemplate 中绑定(bind) CollectionViewSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3358350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com