过去我真的很喜欢在 stackoverflow.com 上阅读解决方案。现在我有一个我找不到答案的问题。开始了 :-)
我在我的代码中使用了两个 3rd 方组件。一个是来自 Extenden WPF Toolkit 的繁忙指示器。请参阅 XAML。
<tool:BusyIndicator IsBusy="{Binding RequirementsModel.Working}" BusyContent="Fetching Data..." >
<local:RequirementsTree Model="{Binding RequirementsModel}" x:Name="Sample" />
</tool:BusyIndicator>
IsBusy 绑定到RequirementsModel.Working。RequirementsModel 是 DataContext 附带的我的视图模型的一部分。让我们看一下我的RequirementsModel 的摘录。
class RequirementsModel : ITreeModel, INotifyPropertyChanged
{
private bool _working;
public bool Working
{
get { return _working; }
set { _working = value; RaisePropertyChanged("Working"); }
}
public bool HasChildren(object parent)
{
Working = true;
/* Data access shall happen here
Entered dummy code */
System.Threading.Thread.Sleep(2000);
bool value = true;
Working = false;
return value;
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
如您所见,“工作”属性已更改,并且 WPF 视图中的绑定应该可以正常工作。但它什么也没发生。我猜这种情况的发生是因为视图的更新发生在方法结束之后。但是到那时工作又是错误的。我也知道我可以在调用方法中设置属性并使 HasChildren() 被异步调用,但这将包括更改其他 3rd 方组件。你知道如何让它工作吗?
谢谢简