2011-07-22 60 views
3

我的GUI上有一个GridView元素绑定到数据源。我决定使用INotifyPropertyChanged,因为这可以通过允许我修改一个会自动更新GridView.的类来简化交互。到目前为止,我对跨线程没有任何问题,但现在我添加了另一个修改我的类的方法(它反过来修改GridView),但是这发生在非UI线程上。我之前通过使用invoke解决了我的问题,但我不确定在执行INotifyPropertyChanged并将其绑定到GridView时该怎么做。任何帮助将非常感谢!INotifyPropertyChanged绑定和跨线程错误

+0

您应该使用UI线程“修改”您的类,让其他线程使用分派器。 – vcsjones

+0

当我在类中调用一个Add to a变量时,我的类被修改:'class.Elements.Add(...);'。那么你在说什么是使用调度员来打电话? – avivas

回答

0

假设您有一个可观察的集合与您的网格绑定。网格是视图。

当标注检索数据时,标注将是异步的以返回数据。在异步事件处理程序,你会希望这样的事情在你的视图模型类:

/// <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()代码,但所做的就是将传入用户列表设置为可观察集合。