У меня есть коллекция viewModels (InputViewModel) в другой viewModel (ScenarioManager). Каждый InputviewModel имеет экземпляр класса (RestOfInput), который содержит свойства, способные поднять OnPropertyChanged. , когда один из этих свойств изменяет событие обрабатываются с помощью этого метода (в InputViewModel):OnPropertyChanged реакция отличается в первый раз и второй раз
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 является эталонным случаем.
Тогда у меня есть это поведение: -если я изменяю поле в случае, которое не является ссылочным: все в порядке. -если я изменяю конкретное поле в справочном примере: в первый раз все в порядке. Но второй раз, только базовый вариант и первый случай (в сборе), не базовый вариант обновляется> Это как цикл Еогеасп сломан ..
Все экспликации.
Если сообщение не ясно, пожалуйста, скажите мне (не легко объяснить;))
Я думаю, что Тиморес на деньги. Я могу увидеть возможное исключение нулевой ссылки в item.RoI (не предполагайте, что передача через if (item! = InpVM) означает, что элемент не является нулевым), и исключение было поймано где-то в дереве выполнения, о котором вы не знали , +1 –
Тиморес благодарен за ответ очень полезный: проблема в цикле foreach первого метода. Поскольку я изменяю Collection _ListOfDifference, цикл не может закончиться. – Gerrrard
Tri Q, нет теста только потому, что ссылочный регистр принадлежит коллекции, но этот нельзя удалить. Хотя это никогда не является null.Thanks вы – Gerrrard