[英]INotifyPropertyChanged Binding and Cross-Threading Error
我的 GUI 上有一个绑定到数据源的GridView
元素。 我决定使用INotifyPropertyChanged
,因为它允许我修改 class,它会自动更新 GridView,从而简化交互GridView.
到目前为止,我在跨线程方面没有任何问题,但现在我添加了另一种方法来修改我的 class(这反过来又修改了 GridView),但这发生在非 UI 线程上。 我之前通过使用invoke
解决了我的问题,但是当我实现INotifyPropertyChanged
并将其绑定到GridView
时,我不确定该怎么做。 任何帮助将不胜感激!
假设您有一个绑定到您的网格的可观察集合。 网格是视图。
当调用检索数据时,调用将异步返回数据。 在异步事件处理程序上,您可能希望在视图 Model class 中出现类似的内容:
/// <summary>
/// This is what is bound to the UI
/// </summary>
private ObservableCollection<UserDTO> _Users;
/// <summary>
/// Collection of Users
/// </summary>
public ObservableCollection<UserDTO> Users
{
get
{
return _Users;
}
set
{
if (_Users != value)
{
_Users = value;
OnPropertyChanged("Users");
}
}
}
/// <summary>
/// Asynchronous Callback For Get Users
/// </summary>
private void UserAgentGetCompleted(object sender, List<UserDto> users)
{
//Make sure we are on the UI thread
this.Dispatcher.BeginInvoke(() => SetUsers(users));
}
然后在 SetUsers 中,您将更新绑定到视图(网格)的数据的可观察集合 (_Users)。 由于可观察集合更新,更改将反映在视图中,因为它通过依赖属性绑定到视图。
请注意,我省略了 SetUsers() 代码,但所做的只是将传入用户列表设置为可观察集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.