设置没有被调用

在我的 C# WPF 应用程序中,我有以下内容:


    ObservableCollection<SpecialtyFees> _SpecialtyFeeEGG;

    public ObservableCollection<SpecialtyFees> SpecialtyFeeEGG

    {

        get { return _SpecialtyFeeEGG; }

        set

        {

            if (_SpecialtyFeeEGG == value)

                return;


            _SpecialtyFeeEGG = value;

            RaisePropertyChanged("SpecialtyFeeEGG");

        }

    }

执行以下行时,将调用 SET 方法,如我所料:


        SpecialtyFeeEGG = new ObservableCollection<SpecialtyFees>();

但是,稍后在代码中,将 specialFee 添加到 SpecialtyFeeEGG 时,它不会被调用,我希望它会被调用。我错过了什么?


        foreach (var item in Specialties)

        {

            SpecialtyFees specialtyFee = new SpecialtyFees();

            specialtyFee.SpecialtyCode = item.SpecialtyCode;

            specialtyFee.CurrentTotal = 0;

            specialtyFee.BidTotal = 0;

            specialtyFee.BidDifference = 0;

            if (specialtyFee.SpecialtyCode.Length == 3)

            {

                SpecialtyFeeEGG.Add(specialtyFee);

            }

        }


Helenr
浏览 104回答 3
3回答

qq_花开花谢_0

正确的使用ObservableCollection方法如下:private ObservableCollection<SpecialtyFees> _SpecialtyFeeEGG&nbsp;&nbsp; &nbsp;= new ObservableCollection<SpecialtyFees>();public ObservableCollection<SpecialtyFees> SpecialtyFeeEGG{&nbsp; &nbsp; get { return _SpecialtyFeeEGG; }}在 WPF 中使用绑定时,每次对绑定源进行更改时都需要通知。否则(例如这种情况)该值始终指的是在构造函数或字段初始值设定项 ( new ObservableCollection<SpecialtyFees>()) 中指定的值。而且由于您不需要更改源,可观察集合将负责对集合所做的添加/删除/更改。在这种情况下也不需要 Set 方法RaisePropertyChanged。但是,只有当您必须更改源时,它才会按您预期的那样处理集合源的更改。

DIEA

您只能编辑对象,而不是对该特定对象的指针/引用。这与说您有列表 x 相同。如果你设置x = new List();你实际上制作了一个新列表。当向这个列表添加一些东西时,x 的引用地址不会改变。而 x 的内容是。

慕侠2389804

该ObservableCollection<SpecialityFees>对象实际上并没有改变,您只是向它的项目添加了内容,因此它不会set在对象本身上触发该方法。您将需要使用该SpecialityFeeEGG_CollectionChanged方法来捕获对集合的添加。
打开App,查看更多内容
随时随地看视频慕课网APP