我们有一个相对较大的数据模型类DataModel
,它绑定到各种UI控件。我们希望在加载数据模型实例时显示来自WPF Toolkit Extended的繁忙指示符。
示例代码如下。繁忙指示符在LoadReport
函数执行时显示,但在assign语句后消失,而绑定操作仍处理,即在接口“就绪”之前。有什么我们可以做的等待吗?
// Show we are busy.
this.Dispatcher.Invoke(DispatcherPriority.Send, (Action)delegate()
{
this.BusyMessage = "Loading report...";
this.IsBusy = true;
});
var instance = this.LoadReport();
this.DataModel = instance;
// Show we are no longer busy.
this.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate()
{
this.BusyMessage = null;
this.IsBusy = false;
});
<toolkit:BusyIndicator IsBusy="{Binding ThisScreen.IsBusy}" BusyContent="{Binding ThisScreen.BusyMessage, TargetNullValue='Please wait...'}" >
<Grid x:Name="ScreenGrid" />
</toolkit:BusyIndicator>
这似乎不是一个不寻常的问题,但我没有任何运气寻找解决方案......提前致谢。
答案 0 :(得分:0)
我说这是预期的行为。
在BusyMessage
方法完成后,您立即将IsBusy
设置为空,将LoadReport()
设置为false。这样就不会让UI的其余部分首先更新。
更好的解决方案可能是提出LoadComplete
事件并添加
// Show we are no longer busy.
this.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate()
{
this.BusyMessage = null;
this.IsBusy = false;
});
在处理程序中:
这将为其他绑定提供更新时间 - 尽管不能保证他们会首先解雇。
答案 1 :(得分:0)
也许您可以尝试设置BusyMessage
&amp; IsBusy
内联,而不是使用Dispatcher调用。
this.DataModel = instance;
// set these directly
this.BusyMessage = null;
this.IsBusy = false;
这会在发生DataModel绑定时通知UI你不会同时忙着 - 一切都会立即发生。
使用Dispatcher就像将通知直接推送到UI线程一样。您忙碌状态与您所做的其他绑定和UI更改“取消链接”。