C# 当我的IsAsync绑定忙时,我想要一个沙漏;可能的
我目前有如下XAML代码:C# 当我的IsAsync绑定忙时,我想要一个沙漏;可能的,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我目前有如下XAML代码: <ListView Name="fileLV" SelectionMode="Extended" ItemsSource="{Binding path=DataContext.SelectedAsset.Files,ElementName=selectionView,IsAsync=True}"/> <UserControl.Resources> <x:Array x:Key="LoadingTemplate" Type
<ListView Name="fileLV" SelectionMode="Extended" ItemsSource="{Binding path=DataContext.SelectedAsset.Files,ElementName=selectionView,IsAsync=True}"/>
<UserControl.Resources>
<x:Array x:Key="LoadingTemplate" Type="DataTemplate">
<DataTemplate>...my daisy code...</DataTemplate></x:Array>...
<ListView.ItemsSource>
<PriorityBinding>
<Binding Path="DataContext.SelectedAsset.Files" ElementName="selectionView" IsAsync="True"/>
<Binding Source="{StaticResource LoadingTemplate}" />
</PriorityBinding>
</ListView.ItemsSource>
“Files”属性需要15秒才能返回。用户一直在想到底发生了什么。我见过一些其他代码显示回退值或使用多个绑定,但这些代码并不依赖于暗示“不要使用此控件”,就像该控件上的沙漏暗示的那样
我想要的是能够命名一个绑定,然后将一些其他属性绑定到该绑定的IsBusy属性。我需要一个触发器,在绑定繁忙时更改该listview上的光标。现有的WPF框架对此有什么帮助吗?我不知道有什么内置的、现成的解决方案,但肯定有办法让您体验一下。
我将快速告诉您我将如何构建它,如果您需要,我也可以提供代码:
为此,请不要使用IsAsync。在属性上使用BackGroundWorker。首先返回带有“工作消息”的源,启动BackGroundWorker,然后在回调上提供真实的源代码并调用NotifyPropertyChanged。您甚至可以有一个进程栏。我能够使DataTemplateSelector工作。需要注意的是,ListView的所有绑定都必须是可枚举的。在我的控件中,我添加了如下资源:
<ListView Name="fileLV" SelectionMode="Extended" ItemsSource="{Binding path=DataContext.SelectedAsset.Files,ElementName=selectionView,IsAsync=True}"/>
<UserControl.Resources>
<x:Array x:Key="LoadingTemplate" Type="DataTemplate">
<DataTemplate>...my daisy code...</DataTemplate></x:Array>...
<ListView.ItemsSource>
<PriorityBinding>
<Binding Path="DataContext.SelectedAsset.Files" ElementName="selectionView" IsAsync="True"/>
<Binding Source="{StaticResource LoadingTemplate}" />
</PriorityBinding>
</ListView.ItemsSource>
我仔细研究了一下这个解决方案。我与它有一些冲突。首先,我喜欢我的Files属性的强类型返回。它实际上在很多地方使用。我不希望每个用户都必须分析返回的数据类型。不过,似乎我可以通过PriorityBinding实现类似的功能。如果它是DataTemplate,我想我会有一个选择器返回项;然后我会将该模板定义为静态资源,并将其绑定为第二优先级。为什么要解雇BackGroundWorker?可以在加载数据时禁用该控件。ProcessChanged比hour glass更具信息性-可以使用%comp更新它删除或删除文件数。使用优先级绑定,您无法禁用或显示真实状态消息。