Как отследить поменялся объект недвижимости? - PullRequest
0 голосов
/ 04 октября 2010

В Viewmodel я хочу отслеживать состояние асинхронного вызова.Предположим, у меня есть два асинхронных вызова в viewmodel, и я хочу отслеживать, когда все асинхронные вызовы выполнены.То, что я сделал, как показано ниже: Установите значение private var для отслеживания каждого асинхронного вызова:

private bool _isDone1 = false;
private bool _isDone2 = false;

Установите одно свойство, например:

 private bool _isDone;
 public bool IsDone
        {
            get { return this._isDone1&&this._isDone2; }
            set
            {
                if (this._isDone != value)
                {
                    this._isDone = value;                    
                    if(this._isDone)
                        {
                          // done somting here when all async call done
                        }
                    this.RaisePropertyChanged("IsDone");
                }
            }
        }

В завершенном событии для каждого асинхронного вызова установите код следующим образом:: Для вызова 1:

_isDone1 = true;
this.RaisePropertyChanged("IsDone");

Для вызова 2:

_isDone2 = true;
this.RaisePropertyChanged("IsDone");

Затем я запускаю приложение. Кажется, код для IsDone никогда не трогать.Как решить эту проблему или найти лучшее решение для этого случая?

1 Ответ

2 голосов
/ 04 октября 2010

Ваша IsDone недвижимость не очень хорошо спроектирована.Сеттер и геттер не имеют ничего общего друг с другом.В какой-то момент ваше приложение может установить для IsDone значение true, но для _isDone1 && _isDone2 значение false.Это может привести к незначительным ошибкам.

Лучший общий подход, когда необходимо выполнить все асинхронные запросы перед выполнением, - использовать пакетный загрузчик.Он соберет все ваши асинхронные запросы и сработает, когда все они будут выполнены. Вот пакетный загрузчик , написанный для RIA Services, но если вы не используете RIA Services, общая концепция все еще применяется.

Что касается того, почему ваш «код для IsDone никогда не затрагивается»трудно сказать по фрагменту, который вы дали.Вы вводите правильное имя изменения свойства, поэтому в вашем приложении происходит что-то еще.Возможно, опубликуете больше кода?

В опубликованном вами коде вы никогда не вызываете установщик IsDone, так как мы знаем оператор if внутри установщика, который используется для обозначения себя, что вы готовы продолжитьникогда не звонят.

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