INotifyPropertyChanged Ошибка привязки и многопоточности - PullRequest
3 голосов
/ 22 июля 2011

В моем графическом интерфейсе есть элемент GridView, связанный с источником данных.Я решил использовать INotifyPropertyChanged, поскольку это упростило бы взаимодействие, позволив мне изменить класс, который автоматически обновит GridView.. До этого момента у меня не было проблем с перекрестным потоком, но теперь я добавил другой методэто модифицирует мой класс (который, в свою очередь, модифицирует GridView), но это происходит в потоке, не связанном с пользовательским интерфейсом.Я решил свои проблемы раньше, используя invoke, но я не уверен, как это сделать, когда я реализую INotifyPropertyChanged и привязываю его к GridView.Буду очень признателен за любую помощь!

1 Ответ

0 голосов
/ 22 июля 2011

Допустим, у вас есть наблюдаемая коллекция, которая привязана к вашей сетке.Сетка является представлением.

Когда вызывается вынос для извлечения данных, выноска будет асинхронной для возврата данных.В обработчике событий 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 вы обновите наблюдаемую коллекцию (_Users), которая является данными, привязанными к представлению (сетке).Поскольку наблюдаемая коллекция обновляется, изменения будут отражены в представлении, поскольку оно связано с представлением через свойство зависимостей.

Обратите внимание, я опустил код SetUsers (), но все, что он делает, этоустановка входящего списка пользователей в наблюдаемую коллекцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...