আমি সাধারণ বাঁধন ব্যবহার করে আইটেম উত্স সংযুক্ত একটি কম্বো বাক্স পেয়েছি। কম্বো বাক্সটি লোড হয়ে গেলে এই বাঁধাইটি রিফ্রেশ করার কোনও উপায় আছে কি?
আমি সাধারণ বাঁধন ব্যবহার করে আইটেম উত্স সংযুক্ত একটি কম্বো বাক্স পেয়েছি। কম্বো বাক্সটি লোড হয়ে গেলে এই বাঁধাইটি রিফ্রেশ করার কোনও উপায় আছে কি?
উত্তর:
আপনি বাঁধাই অভিব্যক্তি ব্যবহার করতে পারেন:
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
((ComboBox)sender).GetBindingExpression(ComboBox.ItemsSourceProperty)
.UpdateTarget();
}
তবে ব্লাইন্ডমাইস হিসাবে উল্লিখিত হয়েছে যে আপনি পরিবর্তন সংক্রান্ত বিজ্ঞপ্তিগুলিও ফায়ার করতে পারেন, যদি আপনার সংগ্রহটি প্রয়োগ করে INotifyCollectionChanged
(উদাহরণস্বরূপ এর প্রয়োগ করা হয় ObservableCollection<T>
) এটি সিঙ্ক্রোনাইজ হবে যাতে আপনার এগুলির কোনও করার দরকার নেই।
আপনি যদি এমভিভিএম ব্যবহার করেন এবং আপনার আইটেমসোর্সটি আপনার ভিএম এ অবস্থিত। যখন আপনি রিফ্রেশ করতে চান তখন কেবল আপনার সংগ্রহের সম্পত্তিটির জন্য INotifyPropertyChanged কল করুন।
OnPropertyChanged("YourCollectionProperty");
INotifyPropertyChanged
তবে আপনি সিরিয়াল বন্দরটির চারপাশে একটি র্যাপার ক্লাস তৈরি করতে পারেন যা প্রয়োগ করে , তবে আপনাকে পোর্টটি ব্যক্তিগত রাখতে হবে এই মোড়কটি এবং সেইজন্য যে বন্দরে আপনি অন্য যে কোনও জায়গায় যে প্রকল্পটি ব্যবহার করতে চান সে বিষয়ে নিশ্চিত হওয়ার জন্য যে সম্পত্তিটি আপনি আগ্রহী সেগুলি সর্বদা মোড়কের মধ্য দিয়ে যান
nameof(YourCollectionProperty)
আক্ষরিক স্ট্রিংয়ের বিপরীতে ব্যবহার করার একটি বড় অনুরাগী । এটি বাগগুলি রিফ্যাক্টরিং থেকে বাধা দেয় এবং প্রকৃত উদ্দেশ্য কী তা আরও স্পষ্ট। এই কোর্স যেখানে আপনি ব্যবহার করতে পারবেন না হয় CallerMemberName
যা এমনকি nicer হয় অ্যাট্রিবিউট
ব্যবহার করার চেষ্টা করুন BindingExpression.UpdateTarget()
আমি ব্যাকএন্ড থেকে ডেটা আনছিলাম এবং কোডের এক লাইনের সাথে স্ক্রিন আপডেট করেছি। এটা কাজ করেছে. নিশ্চিত না, কেন আমাদের ইন্টারফেস প্রয়োগ করা দরকার। (উইন্ডোজ 10, ইউডাব্লুপি)
private void populateInCurrentScreen()
{
(this.FindName("Dets") as Grid).Visibility = Visibility.Visible;
this.Bindings.Update();
}