بروز شدن خودکار آیتم سورس کمبوباکس بدون دلیل
با سی شارپ 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 (انگار که دوباره لیست کمبوباکس رو از اول دارم پر میکنم ) و این باعث میشه برنامه خیلی کند بشه , درحالی که فقط آیتم های دیتاگرید رو مجددا داخلش قرار دادم و اصلا کاری به لیستی که ستون کمبوباکس داره نداشتم
منظورم اینه :

چطور میتونم جلوی این کار رو بگیرم ؟
سورس کامل + دیتابیس : Full Source Code
لینک مرتبط : How can I prevent the ObservableCollection from being refreshed for no reason in WPF?
پاسخ هوش مصنوعی
برای جلوگیری از به روزرسانی بی دلیل فهرست آیتم های DataGridComboBoxColumn در WPF، می توانید از الگوی طراحی MVVM استفاده کنید و مطمین شوید که ObservableCollection مربوط به کمبوباکس تنها در مواقع نیاز به روزرسانی می شود.
به عنوان یک راه حل، می توانید ItemsSource کمبوباکس را به یک CollectionView تبدیل کنید و با حفظ یک Cache از مقادیر قبلی، به روزرسانی را فقط زمانی که داده ها تغییر کردند انجام دهید.
یک کد نمونه برای این کار به صورت زیر است:
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection _commodities;
private ObservableCollection _factors;
public ObservableCollection Commodities
{
get { return _commodities; }
set
{
_commodities = value;
OnPropertyChanged(nameof(Commodities));
}
}
public ObservableCollection Factors
{
get { return _factors; }
set
{
_factors = value;
OnPropertyChanged(nameof(Factors));
}
}
public void RefreshData()
{
// لود مجدد داده ها از پایگاه داده
Factors = LoadFactorsFromDatabase();
}
private ObservableCollection GetCommoditiesWithCache()
{
// اینجا می توانید فقط در صورت تغییر داده ها، Commodities را بارگذاری کنید
if (_commodities == null || _commodities.Count == 0)
{
_commodities = LoadCommoditiesFromDatabase();
}
return _commodities;
}
// Implement INotifyPropertyChanged interface methods...
}
سپس در گرید خود، اطمینان حاصل کنید که DataGridComboBoxColumn منبع خود را به Commodities مربوط به ViewModel متصل کرده اید بدون اینکه بارها آن ها را بارگذاری کنید:
<DataGridComboBoxColumn
Header="Commodity"
SelectedItemBinding="{Binding SelectedCommodity}"
ItemsSource="{Binding Commodities}" />
این کار باعث می شود که فقط در زمان های مشخص، داده های مربوط به کمبوباکس بارگذاری شوند و از به روزرسانی بی دلیل جلوگیری شود.
دوستان یه لینک هست که دقیقا مشکل من رو داره :WPF - Prevent bindings from updating while loading data
منتها جوابی که دادن در مورد sealed class رو کامل متوجه نشدم !
کسی میتونه توضیح بده ؟
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول