我的 GUI 上有一个绑定(bind)到数据源的 GridView
元素。我决定使用 INotifyPropertyChanged
,因为它允许我修改一个会自动更新 GridView 的类,从而简化交互。
到目前为止,我没有遇到任何问题使用跨线程,但现在我添加了另一个方法来修改我的类(这又修改了 GridView),但这是在非 UI 线程上进行的。我之前使用 invoke
解决了我的问题,但我不确定在实现 INotifyPropertyChanged
并将其绑定(bind)到 GridView< 时如何处理它
。非常感谢任何帮助!
最佳答案
假设您有一个绑定(bind)到网格的可观察集合。网格就是 View 。
当进行调出以检索数据时,调出将异步返回数据。在 Async 事件处理程序上,您可能希望在 View Model 类中有类似这样的内容:
/// <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 中,您将更新数据绑定(bind)到 View (网格)的可观察集合 (_Users)。由于可观察集合更新,更改将反射(reflect)在 View 中,因为它通过依赖属性绑定(bind)到 View 。
请注意,我省略了 SetUsers() 代码,但所做的只是将传入用户列表设置为可观察集合。
关于c# - INotifyPropertyChanged 绑定(bind)和跨线程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792718/