繁体   English   中英

INotifyPropertyChanged 绑定和跨线程错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM