دسته بندی ها
18:44 1401/06/15

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

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : WPF سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2011
1 نظر
mojtabahakimian : متوجه شدم چیزی که باعث رفرش شدنش میشه : SelectedValueBinding="{Binding CommodityID}" ولی مسئله اینه که چطور بروز رسانی این رو کنترل کنم

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 05:30 1401/06/16
هوش مصنوعی

پاسخ هوش مصنوعی

برای جلوگیری از به روزرسانی بی دلیل فهرست آیتم های 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}" />

این کار باعث می شود که فقط در زمان های مشخص، داده های مربوط به کمبوباکس بارگذاری شوند و از به روزرسانی بی دلیل جلوگیری شود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mojtabahakimian 01:45 1401/06/17

دوستان یه لینک هست که دقیقا مشکل من رو داره :WPF - Prevent bindings from updating while loading data

منتها جوابی که دادن در مورد sealed class رو کامل متوجه نشدم ! 

کسی میتونه توضیح بده ؟

به این پاسخ امتیاز بدهید    0
امتیاز: 155 رتبه: 10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود