Обновление пользовательского интерфейса в проекте WPF после вызова асинхронной службы WCF - PullRequest
0 голосов
/ 11 марта 2012

У меня следующая проблема.

client.GetServiceMapCompleted += (s, e) =>
            {
                this.MyServiceMap = e.Result;

                this.MyServiceMap.Categories.Add(new Category() { Name = " " });
                this.MyServiceMap.Groups.Add(new Group() { Name = " " });

                this.MyServiceMap.Groups.Sort((a, b) =>
                    {
                    return String.Compare(a.Name, b.Name);
                    });
                this.MyServiceMap.Categories.Sort((a, b) =>
                    {
                        return String.Compare(a.Name, b.Name);
                    });

                this._parents = MyServiceMap.Nodes;
                this._children = MyServiceMap.Nodes;
            };

        client.GetServiceMapAsync(); 

У меня есть свойства MyServiceMap, Parents и Children:

    private ServiceMap _serviceMap;
    public ServiceMap MyServiceMap
    {
        get
        {
            return _serviceMap;
        }
        set
        {
            _serviceMap = value;
            OnPropertyChanged("MyServiceMap");
        }
    }

    private List<Node> _parents;
    public List<Node> Parents
    {
        get
        {
            return _parents;
        }
        set
        {
            _parents = value;
            OnPropertyChanged("Parents");
        }
    }

    private List<Node> _children;
    public List<Node> Children
    {
        get
        {
            return _children;
        }
        set
        {
            _children = value;
            OnPropertyChanged("Children");
        }
    }

В пользовательском интерфейсе я привязываю MyServiceMap к сетке данных, Children и Parents к списку.

Вdatagrid Я вижу все как положено, но поле списка детей и родителей остается пустым.

Мой вопрос заключается в том, почему мой пользовательский интерфейс не обновляется после асинхронного вызова и как это решить?

Tnx дополнительно:)

1 Ответ

1 голос
/ 11 марта 2012

Вы устанавливаете поля, а не свойства (где вы поднимаете PropertyChanged), поэтому ваш пользовательский интерфейс не получает уведомлений об изменениях.

this._parents = MyServiceMap.Nodes;
this._children = MyServiceMap.Nodes;

должно быть

Parents = MyServiceMap.Nodes;
Children = MyServiceMap.Nodes;
...