• 1401/06/15

بروز شدن خودکار آیتم سورس کمبوباکس بدون دلیل :

با سی شارپ WPF ابتدا از جدول مشتریان (کالا هایی که مشتریان خریداری کردند) که اسمش هست : Factor دیتا ها رو از لیسیتی از نوع ObservbleCollection لود میکنم توی DataGrid 

دیتا گرید یه ستون از نوع DataGridComboBoxColumn داره که آیتم های اون (ItemSource) جداگانه از جدول کالا ها Commodity (Select * From Commodity) از نوع ObservbleCollection پر میشه 

پس آیتم های دیتاگرید و ستون داخل اون دیتا گرید جدا از هم پر میشن ولی چیزی که ردیف های ستون کمبوباکس نمایش میده مرتبط به مقدار پر شده در دیتا گرید هستش (ComboBox.SelectedValue)

 

من داخل رویداد RowEndEditing عملیات Insert رو انجام میدم 

و در نهایت میخوام فقط دیتای DataGrid رو با خواندن دیتا مجدد از SQL Server اون رو بروز کنم : (SELECT * FROM Factor)DataGrid.Itemsource 

 

مشکل اینه که DataGridComboBoxColumn که در ابتدا به صورت جداگانه در لودینگ پرش کرده بودم مجددا (بدون اینکه من اصلا کوئری بزنم یا مستقیا با آیتم هاش کاری داشته باشم) خود لیست متصله شروع میکنه به رفرش کردن تک به تک آیتم هاش یعنی صدا زدن {get;set} مربوط به Commodity  (انگار که دوباره لیست کمبوباکس رو از اول دارم پر میکنم ) و این باعث میشه برنامه خیلی کند بشه , درحالی که فقط آیتم های دیتاگرید رو مجددا داخلش قرار دادم و اصلا کاری به لیستی که ستون کمبوباکس داره نداشتم

منظورم اینه :

https://i.postimg.cc/x16bbf2S/Datagrid-Refresh-1.gif

سورس کامل :

https://stackoverflow.com/questions/73620756/how-can-i-prevent-the-observablecollection-from-being-refreshed-for-no-reason-in

  • 1401/06/16
  • ساعت 15:40

سلام، وقتتون بخیر

فکر کنم توی سایت stackoverflow به جواب سوالتون رسیده باشید.


  • 1401/06/16
  • ساعت 20:42

سلام و عرض ادب

متاسفانه توی تست دیدیم هنوز مشکل داره 

ببینید چون SelectedValueBinding="{Binding CommodityID}"  وصله مهم نیست ObservbleCollection هست یا لیست یا اصلا مستقیما دیتاسورس رو پر کنم

بعد از پر کردن آیتم سورس دیتا گرید با گوئری 

اون لیست کمبوباکس هم از اول رفرش میشه !

رهای وجود داره که بگم یه کلاس یا پراپرتی باتوجه به شرت عمل کن , یعنی یه چیزی مثل این :

public class MyCustomModel_Commodity
        {
            private bool _can_read = true;


            public void StopReadable()
            {
                _can_read = false;
            }
            public void BeginReadable()
            {
                _can_read = true;
            }

            private long _comoditycode;
            private string _comodityname;
            public long CommodityCode
            {
                get
                {   //if(_can_read)
                    //{
                    //return _comoditycode;
                    //}
                    //else
                    //{
                    //return;
                    //}
                  
                }
                set { _comoditycode = value; }
            }
            public string CommodityName
            {
                get { return _comodityname; }
                set { _comodityname = value; }
            }
        }

  • 1401/06/19
  • ساعت 08:29

اگر مقدور هست یه راهنمایی بابت این موضوع بفرمایید

چون ظاهرا خاصیت SelectedValueBinding باعث میشه بعد از هر بروز رسانی دیتاگرید آیتم خای داخل کمبوباکس هم همش یکباره دیگه رفرش بشه !


logo-enamadlogo-samandehi