我目前有这样的XAML代码:
<ListView Name="fileLV" SelectionMode="Extended" ItemsSource="{Binding path=DataContext.SelectedAsset.Files,ElementName=selectionView,IsAsync=True}"/>
“Files”属性需要15秒才能返回。用户一直想知道发生了什么事。我已经看到一些其他代码来显示回退值或者使用多个绑定,但那些并不依赖于“将此控件单独保留”,就像沙漏超过该控件所暗示的那样。
我想要的是能够命名一个绑定,然后将一些其他属性绑定到该绑定的IsBusy属性。我希望触发器在绑定繁忙时更改列表视图上的光标。是否有任何现有的WPF框架对此有帮助?
答案 0 :(得分:0)
我不知道任何内置,开箱即用的解决方案,但确实有办法让您获得愉快的体验它。 我会快速了解如何构建它,如果需要,我也可以提出代码:
创建一个&#34; LoadingItem&#34; DataTemplate将显示某种进度条作为列表中的项目
创建一个&#34; DataTemplateSelector&#34;在LoadingItem之间切换 和列表中的RegularItem。
答案 1 :(得分:0)
为此,请勿使用IsAsync。在Property上使用BackGroundWorker。首先返回带有“工作消息”的源,启动BackGroundWorker,然后在回调上提供真实源并调用NotifyPropertyChanged。你甚至可以有一个progess酒吧。
答案 2 :(得分:0)
我能够使DataTemplateSelector工作。需要注意的是,ListView的所有绑定都需要是可枚举的。在我的控制下,我添加了这样的资源:
<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>
然后我安装了这个模板选择器:
public class OverridableDataTemplateSelector: DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return item as DataTemplate ?? base.SelectTemplate(item, container);
}
}