তালিকা <টি> বনাম বন্ডিংলিস্ট <টি> সুবিধা / ডিসঅ্যাডভান্টেজ


93

আমার প্রকল্পের জন্য কেউ দুজনের মধ্যে পার্থক্য কী তা বর্ণনা করতে পারে।

বর্তমানে আমার কাছে একটি আছে List<MyClass>এবং এটিতে বন্ডিংসোর্স এবং একটি ডাটাগ্রিডভিউকে বাইন্ডিংসোর্সে সেট করেছি।

IEditableObjectবাতিলকরণপরিষদ ডেকে এলে আমি প্রয়োগ করেছি তাই আমি আমার অবজেক্টটি এটির সাথে ফিরে যাচ্ছি এটির সাথেMemberwise.Clone()

আমার তালিকাটিকে কোনও বন্ডিংলিস্টে পরিবর্তন করলে এর যে কোনও সমাধান হবে এবং একটি বন্ডিংলিস্ট ব্যবহারের সুবিধা কী?

উত্তর:


124

List<>হ'ল একটি স্বয়ংক্রিয়ভাবে পুনরায় আকার দেওয়ার অ্যারে, প্রদত্ত ধরণের আইটেমগুলির সাথে বেশ কয়েকটি সহায়ক ফাংশন (যেমন: সাজানো)। এটি কেবলমাত্র ডেটা, এবং আপনি সম্ভবত এটি আপনার মডেলটিতে অবজেক্টের সেটগুলিতে পরিচালনা করতে ব্যবহার করতে পারেন।

BindingList<>টাইপড তালিকা বা সংগ্রহের চারপাশে একটি মোড়ক যা IBindingListইন্টারফেস প্রয়োগ করে । এটি এমন একটি স্ট্যান্ডার্ড ইন্টারফেস যা দ্বি-মুখী ডেটাবেন্ডিং সমর্থন করে। এটি ListChangedইভেন্টটি প্রয়োগ করে কাজ করে , যা আপনি আইটেমগুলি যুক্ত, সরানো বা সেট করার সময় উত্থাপিত হয়। বাউন্ড কন্ট্রোলগুলি কখন তাদের প্রদর্শনকে রিফ্রেশ করতে হবে তা জানতে এই ইভেন্টটি শোনেন।

আপনি যখন একটি বাইন্ডিংসোর্সের ডেটাসোর্স সেট করেন List<>, এটি অভ্যন্তরীণভাবে BindingList<>আপনার তালিকা মোড়ানোর জন্য একটি তৈরি করে । আপনি BindingList<>যদি নিজের তালিকাটি বাইন্ডিংসোসরের বাইরে অ্যাক্সেস করতে চান তবে নিজের সাথে নিজের সাথে প্রাক-মোড়ানো করতে চাইতে পারেন, তবে অন্যথায় এটি ঠিক একই। BindingList<>আইটেমগুলি পরিবর্তন করার সময় আপনি বিশেষ আচরণ প্রয়োগ করতেও উত্তরাধিকারী হতে পারেন।

IEditableObjectবাইন্ডিংসোর্স দ্বারা পরিচালিত হয়। আপনি যখন কোনও সীমাবদ্ধ নিয়ন্ত্রণে ডেটা পরিবর্তন করেন এটি কোনও প্রয়োগকারী অবজেক্টে বিগ্রেইডিটকে কল করবে। তারপরে আপনি বাইন্ডিংসোর্সে এন্ডএডিট / বাতিলএডিট কল করতে পারেন এবং এটি এটি আপনার অবজেক্টের সাথে প্রেরণ করবে। একটি পৃথক সারিতে চলে যাওয়ার সাথে সাথে এন্ডএডিটকেও কল করবে।


বর্তমানে আমার তালিকার সাথে <T> পদ্ধতির সাথে ক্যান্সেলএলডিট কল করে আইটেমটি সম্পাদনা করা হচ্ছে তার মূল অবস্থায় ফিরে আসবে না তাই আমি ক্লোন () কেন ব্যবহার করি। আপনি কি বলছেন যে একটি বাঁধাইয়ের তালিকাটি আমার পক্ষে তা পরিচালনা করবে?
জন

4
না, একটি কার্যকারিতাটির সাথে একটি বাইন্ডিংলিস্টের কোনও সম্পর্ক নেই। বাইন্ডিংসোর্স অন্তর্নিহিত তালিকার ধরণের নির্বিশেষে বর্তমান অবজেক্টটিতে কেবল বাতিলঅডিট কল করে। কাঠামোটিতে এমন কিছুই নেই যা প্লেইন অবজেক্টগুলির জন্য স্বয়ংক্রিয়ভাবে বস্তুর সংস্করণ প্রয়োগ করে। আপনি ডেটা টেবিল / ডেটারো ব্যবহার করতে পারেন, যা কেবলমাত্র এই উদ্দেশ্যে ডেটার একটি মূল অনুলিপি রাখে।
অ্যালেক্স জে

আপনি বলছেন যে তালিকাটি কখন পরিবর্তন হয় তা নিয়ন্ত্রণগুলি জানতে হবে, আপনি আরও ব্যাখ্যা করতে পারবেন? আমার একটি ডেটাগ্রিডভিউ সহ একটি ফর্ম এবং তারপরে জনবহুল ডেটাযুক্ত এর থেকে অন্য ফর্ম। এই বিষয়ে আপনার বক্তব্য সম্পর্কে কি আমার নিজেকে চিন্তা করার দরকার আছে?
জন

উদাহরণস্বরূপ, একটি নতুন সারি যুক্ত করার জন্য আপনার তালিকায় আইটেমগুলি কখন যুক্ত করা হবে তা ডেটাগ্রিডের জানা দরকার। তার জন্য এটি বাইন্ডিংলিস্টের তালিকাচেনড ইভেন্টটি ব্যবহার করে। আপনি যদি গ্রিডটিকে সরাসরি কোনও তালিকার <T> তে আবদ্ধ করে রাখছিলেন তবে আপনার ইভেন্টটি হবে না এবং আপনি তালিকাটি কখন পরিবর্তন করেছেন তা গ্রিডটি জানতে সক্ষম হবে না। আপনার পরিস্থিতিতে আপনার এটি নিয়ে চিন্তা করার দরকার নেই কারণ বাইন্ডিংসোর্স আপনার জন্য একটি বন্ডিংলিস্টে <T> তালিকাটি গুটিয়ে রাখে। যতক্ষণ আপনি বাইন্ডিংসোর্সের সাথে কাজ করেন এবং তালিকাটি নিজেই না, ততক্ষণ নিয়ন্ত্রণগুলি সিঙ্কে থাকবে।
অ্যালেক্স জে

ডাব্লুপিএফ ইউআইতে (এমভিভিএম উপায়) বাইন্ডিংলিস্ট ব্যবহার করার কি কোনও উপায় নেই? আমি কি একটি পর্যবেক্ষণযোগ্য কালেকশনে বন্ডিংলিস্টটি लपेटতে পারি?
ল্যান্স

13

একটি বাইন্ডিংলিস্ট ইভেন্টগুলি ব্যবহার করে দ্বি-মুখী ডেটাবাইন্ডিংয়ের অনুমতি দেয়, কোনও তালিকা যখন এর সংগ্রহ পরিবর্তন হয় তখন ইভেন্টগুলি গুলি চালায় না।

আমি মনে করি না এটি আপনার বিশেষ সমস্যার সমাধান করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.