gpt4 book ai didi

c# - INotifyPropertyChanged 绑定(bind)和跨线程错误

转载 作者:行者123 更新时间:2023-11-30 18:41:27 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com