- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有文本框的用户控件和一个基本上是带有 CollectionView 的 ListBox 的自定义列表控件。我想使用 CollectionView 的过滤器功能并使用文本框中的文本来过滤可见元素。
xaml 的简化表示:
<TextBox x:Name="FilterTextControl"/>
<CustomControls:OverviewControl
x:Name="ProfileOverviewControl"
FilterText="{Binding ElementName=FilterTextControl, Path=Text, Mode=OneWay, Delay=5000}"
Items="{Binding AllItems}"/>
CollectionViewSource:
<CollectionViewSource x:Key="GroupedProfiles"
Source="{Binding Items, RelativeSource={RelativeSource AncestorType=local:OverviewControl}}"
Filter="GroupedProfiles_OnFilter">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="Location" />
<componentModel:SortDescription PropertyName="Description" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Location" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
OverviewControl 中的 FilterText 依赖属性:
public string FilterText
{
get => (string)GetValue(FilterTextProperty);
set => SetValue(FilterTextProperty, value);
}
public static readonly DependencyProperty FilterTextProperty =
DependencyProperty.Register(nameof(FilterText), typeof(string),
typeof(ProfileOverviewControl), new FrameworkPropertyMetadata(OnFilterTextChanged));
private static void OnFilterTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var intanceOfThisClass = (ProfileOverviewControl)d;
if (_collectionViewSource == null)
_collectionViewSource = intanceOfThisClass.FindResource("GroupedProfiles") as CollectionViewSource;
_collectionViewSource?.View?.Refresh();
}
OnFilterEvent 方法:
private void GroupedProfiles_OnFilter(object sender, FilterEventArgs e)
{
e.Accepted = string.IsNullOrEmpty(FilterText) || e.Item.ToString().Contains(FilterText);
}
问题
正如您在 FilterText 的绑定(bind)中看到的,我有 5000 毫秒的延迟。出于测试目的,我将其设为 5000 毫秒而不是合理的 500 毫秒。为了使过滤器工作,我需要刷新 CollectionView。然而,PropertyChangedCallback 在每次更改后立即触发,而不是使用延迟绑定(bind)来限制它。
我不太理解这种行为。如果这就是延迟绑定(bind)的工作方式,是否有其他方法可以限制 CollectionView 刷新?
最佳答案
尝试像这样反转绑定(bind)。这样,延迟将发生在文本框更改上。现在延迟发生在过滤器属性更改上(如果从 OverviewControl 更改)。
<TextBox x:Name="FilterTextControl" Text="{Binding ElementName=ProfileOverviewControl, Path=FilterText, Delay=5000}"/>
<CustomControls:OverviewControl
x:Name="ProfileOverviewControl"
Items="{Binding AllItems}"/>
关于c# - DependencyProperty 的 PropertyChangedCallback 忽略延迟绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449162/
我有一个用户控件,它有两个 DependencyProperties。每个 DependencyProperty 都有 PropertyChangedCallback。在设置属性值的顺序中调用回调很重
看起来 WPF 并不总是调用 DependencyProperty 的已注册 PropertyChangedCallback 过程。即使我们从 VM 手动引发 PropertyChanged 事件,W
这已经困扰我一段时间了,所以我问了一个同事他是否能理解它,现在我来了;) 为什么可以在依赖属性的 PropertyChangedCallback 中访问持有类的私有(private)成员? 让我通过这
我有一个 TextBox 绑定(bind)到一个依赖属性,我已经实现了一个 PropertyChangedCallBack 函数,当文本更改时我需要调用 textbox.ScrollToEnd() 但
如果有自己的用户控件,带有 DependencyProperty 和相应的回调方法,如下所示: public partial class PieChart : UserControl { pu
我有一个依赖属性和一个回调。 public static readonly DependencyProperty IsBusyProperty = DependencyProp
我有一个派生自 System.Windows.Controls.UserControl 的类,我需要将 PropertyChangedCallback 添加到 FrameworkElement.Mar
我创建了一个派生自 Canvas 的控件,它应该绘制一个实时图表,给定值通过绑定(bind)传递给 DependencyProperty。简化版是这样的: public class Plotter :
我有一个具有三个属性 (x1,x2,x3) 和该属性的 PropertyChangedCallback 的对象集合。 此集合绑定(bind)到 Wpf DataGrid。然后我想用像“x1+x2”这样
我有一个类的依赖属性,我们称它为“SomethingControl”: public static readonly DependencyProperty SomethingProperty = De
我有一个用户控件,它公开了一个名为 VisibileItems 的 DependencyProperty每次更新该属性时,我都需要触发另一个事件。为此,我添加了一个带有 PropertyChanged
我正在创建一个具有PropertyChangedCallback依赖项属性的WPF CustomControl。在该Callback方法中,我尝试使用GetTemplateChild()方法从OnAp
DependencyProperty.OverrideMetadata() 是否也覆盖了 PropertyChangedCallback? 最佳答案 取自此处:http://msdn.microsof
DependencyProperty.OverrideMetadata() 是否也覆盖了 PropertyChangedCallback? 最佳答案 取自此处:http://msdn.microsof
我的大体理解是,当属性发生变化时,会立即执行本地回调。所以我可以假设这会立即发生。但是,绑定(bind)属性的回调在绑定(bind)传播之前不会发生,这可能不会立即发生。这是正确的吗? 最佳答案 听起
我想在每次更改属性时执行一些代码。以下在一定程度上起作用: public partial class CustomControl : UserControl { public bool
我有一个带有文本框的用户控件和一个基本上是带有 CollectionView 的 ListBox 的自定义列表控件。我想使用 CollectionView 的过滤器功能并使用文本框中的文本来过滤可见元
我正在创建一个 WinRT CustomControl,它具有 PropertyChangedCallback 的依赖属性。在该回调方法中,我尝试为我使用 GetTemplateChild() 方法从
我的应用程序使用 MVVM 架构,ViewModel 不了解 View。当 ViewModel 对象需要显示新 View 时,它会公开一个公共(public) ShowNewView 属性,该属性是一
我需要从 ViewModel 将焦点设置到 UIElement 的附加属性。我创建了 Attached 属性,并在 PropertyChangedCallback 中将焦点设置到 UIElement。
我是一名优秀的程序员,十分优秀!