我正在使用wpf busy指示符并从viewModel设置其Isbusy
属性。我希望过滤Isbusy
并在UI上推送ICollectionview
财产取消Filter
属性。我放入的IsBusy = true;
await Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new System.Action(() =>
{
this.MyCollectionView.Filter = item =>
{
Iitem IdName = item as Iitem;
return Regex.IsMatch(IdName.Name, SearchText, RegexOptions.IgnoreCase);
};
}));
操作
Task.Delay(200).Wait();
解决方法:如果我在设置IsBusy
后放置@EnableAutoConfiguration(
exclude = {
OAuth2RestOperationsConfiguration.class, ResourceServerTokenServicesConfiguration.class, ResourceServerTokenServicesConfiguration.class} )
,则会在某些情况下显示忙碌指示符。
答案 0 :(得分:0)
Filter
始终在UI线程上运行,使其过于繁忙,无法实际更新UI以反映IsBusy
状态。
在大多数情况下,Filter
功能应该足够快,以至于他们不需要任何特殊处理。但是,如果您确定需要运行耗时的过滤器,那么最好的方法是拆分为两个不同的集合:MyCollection
和{{ 1}}。然后,任何时候MyFilteredCollection
(或过滤器)更改,执行以下操作:
MyCollection
(这假设IsBusy = true;
var items = MyCollection.ToList();
var filter = SearchText;
MyFilteredCollection = await Task.Run(() =>
items.Where(x => Regex.IsMatch(x.Name, filter, RegexOptions.IgnoreCase)));
IsBusy = false;
会阻止IsBusy
和MyCollection
发生变化。