برنامه نویسی

چگونه می توان دید dataGrid را به صورت پویا در C# WPF متصل کرد؟

مقدمه

اگر در حال کار با WPF (بنیاد ارائه ویندوز) هستید ، ممکن است سناریوهایی را پیدا کرده باشید که به روزرسانی یک ویژگی استاتیک نشان دهنده تغییر در UI شما نیست ، مانند دید یک DataGrid. در این مقاله ، ما بررسی خواهیم کرد که چرا این اتفاق می افتد و چگونه می توان به درستی از دیدگاه خود متصل شد تا اطمینان حاصل شود که در صورت تغییر خاصیت اصلی آن ، به طور پویا به روز می شود.

درک مسئله

در سناریوی شما ، یک dataGrid دارید که دید آن به یک خاصیت استاتیک به نام DatagridGroupedBySeqبشر مشکل به وجود می آید زیرا خصوصیات استاتیک اجرا نمی کنند INotifyPropertyChanged رابط ، که برای اطلاع از UI در هنگام ایجاد تغییرات در داده های محدود بسیار مهم است. بدون این اعلان ، حتی اگر این ملک تغییر کند ، UI از این به روزرسانی ها بی خبر است ، از این رو دید DataGrid همانطور که انتظار می رود تغییر نمی کند.

نحوه اجرای صحیح اتصال دید پویا

برای پاسخ دادن به دیدگاه داده خود به تغییرات در خاصیت ، رویکردهای زیر را در نظر بگیرید:

از یک ویژگی نمونه با iNotifyPropertyChanged استفاده کنید

به جای استفاده از یک خاصیت استاتیک ، به یک ویژگی نمونه در یک ViewModel که پیاده سازی می کند ، تغییر دهید INotifyPropertyChanged رابط این امر سیستم اتصال داده در WPF را قادر می سازد تا به تغییرات گوش داده و UI را بر این اساس به روز کند.

در اینجا نحوه اجرای آن آورده شده است:

  1. یک کلاس ViewModel ایجاد کنید

    public class BomCompareItemVM : INotifyPropertyChanged
    {
        private Visibility datagridGroupedBySeq;
    
        public Visibility DatagridGroupedBySeq {
            get => datagridGroupedBySeq;
            set {
                if (datagridGroupedBySeq != value) {
                    datagridGroupedBySeq = value;
                    OnPropertyChanged(nameof(DatagridGroupedBySeq));
                }
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    

    در این کد ، ما تعریف می کنیم DatagridGroupedBySeq املاک با یک قسمت پشتیبان و هنگام تغییر ، UI را به شما اطلاع می دهد.

  2. دید را در XAML متصل کنید
    XAML خود را به روز کنید تا به این ویژگی نمونه متصل شوید:

    
        
            
            
        
    
    

    اطمینان حاصل کنید که به درستی به خاصیت نمونه الزام آور هستید.

  3. ویژگی را از کد پشت به روز کنید
    کنترل کننده رویداد خود را اصلاح کنید تا ویژگی نمونه را به طور مناسب به روز کنید:

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (sender != null)
        {
            string item = ((ComboBoxItem)((ComboBox)sender).SelectedValue).Content.ToString();
    
            var vm = (BomCompareItemVM)Application.Current.Resources["vm"];
    
            if (item == "Group By Seq")
            {
                vm.DatagridGroupedBySeq = Visibility.Visible;
            }
    
            if (item == "Group By Type")
            {
                vm.DatagridGroupedBySeq = Visibility.Hidden;
            }
        }
    }
    

    در اینجا ، به جای دسترسی مستقیم به یک ویژگی استاتیک ، نمونه ViewModel را از منابع مشترک در برنامه خود برای به روزرسانی دریافت می کنید.

سوالات متداول

1. چرا داده من دید خود را به روز نمی کند؟

اگر به یک خاصیت استاتیک که UI را در مورد تغییرات آگاه نمی کند ، DataGrid به روز نمی شود. استفاده از یک ملک در نمونه ای که پیاده سازی می کند INotifyPropertyChanged این مسئله را حل می کند.

2. چگونه می توانم ViewModel خود را بسازم؟

کلاس ایجاد کنید که پیاده سازی کند INotifyPropertyChanged و ویژگی ها را با زمینه های پشتیبان تعریف کنید تا اعلان های تغییر خاصیت را ایجاد کنید.

3. آیا می توانم با استفاده از همان روش به کنترل های دیگر متصل شوم؟

بله در INotifyPropertyChanged از رویکرد می توان برای هر کنترل قابل قبول استفاده کرد و امکان به روزرسانی های پویا را در کل برنامه WPF شما فراهم می کند.

پایان

به طور خلاصه ، برای اطمینان از به روزرسانی دیدگاه DataGrid خود به درستی هنگام تغییر خاصیت محدود آن ، از یک ویژگی نمونه در یک ViewModel استفاده کنید که INotifyPropertyChanged رابط این به DataGrid شما اجازه می دهد تا تغییرات دید را همانطور که انتظار می رود منعکس کند. با دنبال کردن این روش ، می توانید یک رابط کاربری پاسخگو و پویا در WPF ایجاد کنید که تجربه کاربر را تقویت می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا