OnPropertyChanged реакция отличается в первый раз и во второй раз - PullRequest
0 голосов
/ 06 октября 2010

У меня есть коллекция viewModels (InputViewModel) в другой viewModel (ScenarioManager).каждый InputviewModel имеет экземпляр класса (RestOfInput), который содержит свойства, способные вызывать OnPropertyChanged.когда одно из этих свойств изменяется, событие обрабатывается этим методом (в InputViewModel):

        public void TestAfterChanges(object sender, PropertyChangedEventArgs e)
        {
            MessageBox.Show("not ref");
            bool isInTheList = false;
            RestOfInput roi = sender as RestOfInput;
            string prop = e.PropertyName;

            if (prop!="NameFile")
            { 
                Difference d = new Difference();
                d.Length = prop;
                d.Value1 = reference.RoI.getValueByPropertyName(prop);
                d.Value2 = roi.getValueByPropertyName(prop);

                foreach (Difference diff in _ListOfDifferences)
                {
                    if (diff.Length==prop)   
                    {
                        if ( (Math.Abs(d.Value2-d.Value1)>0.001*d.Value1))
                        {
                            //replace by le new one
                             _ListOfDifferences.Insert(_ListOfDifferences.IndexOf(diff), d);
                            _ListOfDifferences.Remove(diff);
                        }
                        else
                        {
                            //if change make the field value equal to the ref then remove from difference list
                            _ListOfDifferences.Remove(diff);
                        }
                        isInTheList = true;
                    }

                }

                if ((Math.Abs(d.Value2 - d.Value1) > 0.001 * d.Value1) && isInTheList==false)
                {
                    _ListOfDifferences.Add(d);
                }

            }


        }

этот метод дает только сводку различий между этим конкретным случаем и ссылочным случаем.

Теперь, если базовый случай меняется, мне нужно обновить все случаи, и событие обрабатывается в ScenarioManager:

    public void refCaseChanging(object sender, PropertyChangedEventArgs e)
    {
        MessageBox.Show("ref");

        string propname = e.PropertyName;      
        foreach (InputViewModel item in _casesList)
        {
            if (item!=inpVM)
            {
                item.RoI.OnPropertyChanged(propname);
            }                
        }

    }

- это базовый случай в inpVM.

Тогда у меня есть такое поведение: -если я изменяю поле в случае, который не является эталонным случаем: все в порядке.-если я изменяю конкретное поле в контрольном случае: в первый раз все ок.Но во второй раз обновляются только эталонный регистр и первый регистр (в коллекции), который не является эталонным регистром> Это похоже на разрыв цикла foreach ..

Любые объяснения.

Если сообщение не ясно, пожалуйста, скажите мне (не легко объяснить;))

1 Ответ

1 голос
/ 06 октября 2010

Исключение может объяснить, что обработка останавливается (хотя можно ожидать, что она будет перехвачена и отображена где-то).

Вы пытались попросить VS остановить вашу программу при возникновении исключения?(если вы никогда не делали этого раньше, перейдите в раздел «Отладка / Исключения» и установите флажок для исключений CLR)

...