OnPropertyChanged反应第一次和第二次不同

时间:2010-10-06 04:12:58

标签: wpf inotifypropertychanged

我在另一个viewModel(ScenarioManager)中有一个viewModels(InputViewModel)的集合。 每个InputviewModel都有一个Class(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 个答案:

答案 0 :(得分:1)

异常可以解释处理停止(尽管人们期望它会被捕获并显示一些)。

您是否曾尝试在抛出异常时让VS停止您的程序? (如果您以前从未这样做过,请转到Debug / Exceptions并选中CLR例外的复选框)