নির্বাচিত আইটেম, সিলেক্টভ্যালু এবং নির্বাচিতভ্যালুপাথের মধ্যে পার্থক্য


351

নিম্নলিখিতটি হ'ল পার্থক্যটি কী:

এই সমস্ত নির্ভরতা বৈশিষ্ট্য নির্বাচক শ্রেণিতে সংজ্ঞায়িত করা হয় । আমি প্রায়ই গুলান SelectedItemসঙ্গে SelectedValue, এবং SelectedValueসঙ্গে SelectedValuePath

আমি তাদের মধ্যে পার্থক্যটি জানতে চাই এবং এছাড়াও আমরা কখন তাদের ব্যবহার করব বিশেষত SelectedValueএবং SelectedValuePath। কিছু সহজ উদাহরণ দিয়ে তাদের ব্যবহার ব্যাখ্যা করুন ।



2
সম্ভাব্য সদৃশ ([কম্বো DisplayMemberPath, SelectedValue এবং SelectedValuePath wpf সঙ্গে গুলিয়ে ফেলা] stackoverflow.com/questions/3797034/... )

উত্তর:


552

তাদের নামগুলি কিছুটা বিভ্রান্ত হতে পারে :) :) এখানে একটি সংক্ষিপ্তসার:

  • SelectedItem সম্পত্তি সমগ্র বস্তু আপনার তালিকার আবদ্ধ হয় ফেরৎ। সুতরাং বলুন যে আপনি Categoryঅবজেক্টের সংকলনে একটি তালিকা বেঁধে দিয়েছেন (প্রতিটি বিভাগের নাম এবং আইডি বৈশিষ্ট্যযুক্ত)। যেমন। ObservableCollection<Category>SelectedItemসম্পত্তি আপনি বর্তমানে নির্বাচিত ফিরে আসবে Categoryঅবজেক্ট। তবে বাধ্যতামূলক উদ্দেশ্যে, আপনি যা চান তা সর্বদা এটি নয়, কারণ এটি কেবল আপনাকে তালিকাতে বাধ্যতামূলক সম্পত্তিতে একটি সম্পূর্ণ বিভাগের বিষয়বস্তুকে বেঁধে রাখতে সক্ষম করে, বিভাগের বস্তুর উপর কোনও একক সম্পত্তির মান নয় (যেমন এর IDসম্পত্তি হিসাবে) )।

  • অতএব, আমাদের কাছে বদ্ধের বিকল্প উপায় হিসাবে সিলেক্টভ্যালিউপ্যাথ সম্পত্তি এবং SelectedValue সম্পত্তি রয়েছে (আপনি একে অপরের সাথে একত্রে ব্যবহার করেন) use আসুন আমরা বলি Productযে আপনার একটি অবজেক্ট রয়েছে যা আপনার দৃষ্টিভঙ্গিতে আবদ্ধ (প্রোডাক্টনাম, ওজন ইত্যাদির মতো বৈশিষ্ট্যের সাথে)। আসুন আমরা এটিও বলে থাকি CategoryIDযে সেই পণ্যটির উপর আপনার সম্পত্তি রয়েছে এবং আপনি ব্যবহারকারীদের বিভাগের তালিকা থেকে পণ্যটির জন্য কোনও বিভাগ নির্বাচন করতে সক্ষম হতে চান। CategoryIDপ্রোডাক্ট অবজেক্টে সম্পত্তি অর্পণ করার জন্য আপনার বিভাগের আইডি সম্পত্তি প্রয়োজন । এই যেখানে SelectedValuePathএবংSelectedValueবৈশিষ্ট্যগুলি অন্তর্ভুক্ত হয় You আপনি উল্লেখ করেন যে বিভাগ অবজেক্টের আইডি সম্পত্তিটি সেই পণ্য আইটেমের SelectedValuePath='ID'যে SelectedValueবৈশিষ্ট্যটি ব্যবহার করতে হবে যা তালিকা ব্যবহার করতে বাধ্য bound এবং তারপরে সম্পত্তিটিকে ডেটা কনটেক্সট (যেমন পণ্য)) সাথে যুক্ত করে।

নীচের উদাহরণ এটি দেখায়। আমাদের বিভাগগুলির একটি তালিকাতে আইটেমসোর্সের মাধ্যমে আবদ্ধ একটি কম্বোবক্স রয়েছে। আমরা নির্বাচিত মান (নির্বাচিত মূল্য সংস্থান ব্যবহার করে) হিসাবে পণ্যটিতে ক্যাটাগরিআইড সম্পত্তি আবদ্ধ করছি। আমরা এটিকে নির্বাচিতভ্যালুপথ সংস্থার মাধ্যমে বিভাগের আইডি সম্পত্তির সাথে সম্পর্কিত করছি। এবং আমরা বলছি কেবল কম্বোবক্সে কেবলমাত্র নাম সম্পত্তি প্রদর্শন, ডিসপ্লে মেম্বারপথ সম্পত্তি সহ)।

<ComboBox ItemsSource="{Binding Categories}" 
          SelectedValue="{Binding CategoryID, Mode=TwoWay}" 
          SelectedValuePath="ID" 
          DisplayMemberPath="Name" />
public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Product
{
    public int CategoryID { get; set; }
}

শুরুতে এটি কিছুটা বিভ্রান্তিকর, তবে আশা করি এটি এটিকে আরও পরিষ্কার করে দেয় ... :)

ক্রিস


8
ব্যাখ্যার জন্য ধন্যবাদ. আপনি কি সেই একই লোক, যিনি সিলভারলাইটে বই লিখেছেন? আমি বিশ্বাস করি না আমি তোমার সাথে কথা বলছি : -) ... আমি আজকাল এই বইটি পড়ছি। সত্যিই একটি দুর্দান্ত কাজ। :-)
নওয়াজ

22
হ্যাঁ, এটাই আমি :)। আমি যখন পারব তখন প্রশ্নের উত্তর দেওয়ার জন্য আমি এখানে এইগুলি ঘিরে রেখেছি। আপনি বইটি উপভোগ করছেন খুশি :)। যেহেতু আপনি বইটি পেয়েছেন, আপনি এই বিষয়টির পৃষ্ঠা 69-70 পৃষ্ঠা এবং 204 পৃষ্ঠাতে পাবেন
ক্রিস অ্যান্ডারসন

8
+1 টি। +100। আপনি স্যার, কম পুরুষদের মধ্যে সোনার দেবতা। Youশ্বর আপনাকে এবং যারা আপনাকে যাত্রা করে তাদের মঙ্গল করুন। :) সিরিয়াসলি, আমি এটি বের করার চেষ্টা করতে দু' ঘন্টা ব্যয় করেছি - ধন্যবাদ!
তারকাডাল

1
@ ক্রিস অ্যান্ডারসন: যদি পণ্যের আইটের কোনও বিভাগের পরিবর্তে বিভাগের সম্পত্তি (টাইপ বিভাগ) থাকে? বাঁধাইয়ের মাধ্যমে কম্বোবক্সের পরিবর্তনে আমি এই বিভাগের সম্পত্তিটি কীভাবে আপডেট করব?
লুসিফার

2
@ লুসিফার: এই ক্ষেত্রে আপনি নির্বাচিত আইটেম সম্পত্তিটি এর মতো ব্যবহার করবেন: <কম্বোবক্স আইটেমসোর্স = "inding বাঁধাই বিভাগসমূহ" Se "নির্বাচিত আইটেম =" {বাঁধাই বিভাগ, মোড = দ্বিগুণ} "/> আশা করি এটি সহায়তা করবে।
ক্রিস অ্যান্ডারসন

69

কিছুটা ধারণাগতভাবে উত্তর দিতে:

SelectedValuePathতালিকাবক্সের সাথে আবদ্ধ বস্তুর কোন সম্পত্তি (তার নাম দিয়ে) নির্ধারণ করে ItemsSourceতা আইটেমটির হিসাবে ব্যবহৃত হবে SelectedValue

উদাহরণস্বরূপ, যদি আপনার তালিকা বাক্সে একটি সংগ্রহ আবদ্ধ হয় Personবস্তু, প্রতিটি যা হয়েছে Name, Ageএবং Genderসম্পত্তি, SelectedValuePath=Nameনির্বাচিত মান হতে হবে Person'র Nameসম্পত্তিতে ফেরত পাঠাবে SelectedValue

মনে রাখবেন যে আপনি যদি লিস্টবক্সের কন্ট্রোলটিম্পলেট (বা কোনও স্টাইল প্রয়োগ করেন) ওভাররাইড করে যা কোন সম্পত্তি প্রদর্শন করবে তা নির্দিষ্ট করে, SelectedValuePath তা ব্যবহার করা যাবে না।

SelectedItemএরই মধ্যে পুরোটি প্রদান করে Person বর্তমানে নির্বাচিত বস্তুটি প্রদান করে।

(এখানে ট্রিভিউউ ব্যবহার করে এমএসডিএন আরও উদাহরণ )

হালনাগাদ: @ জো যেমন বলেছে, ডিসপ্লে মেম্বারপথ সম্পত্তি নির্বাচিত * বৈশিষ্ট্যের সাথে সম্পর্কিত নয়। এর যথাযথ বিবরণ নিম্নলিখিত:

নোট করুন যে এই মানগুলি পৃথক DisplayMemberPath(যা আইটেমকন্ট্রোলের উপর সংজ্ঞায়িত করা হয়েছে, নির্বাচক নয়), তবে সেই সম্পত্তির সাথে একই আচরণ রয়েছে SelectedValuePath: শৈলী / টেমপ্লেটের অনুপস্থিতিতে, এটি চিহ্নিত করে যে আইটেমের সাথে আবদ্ধ বস্তুর কোন সম্পত্তি তার হিসাবে ব্যবহার করা উচিত স্ট্রিং প্রতিনিধিত্ব।


8

SelectedItemএকটি objectSelectedValueএবং SelectedValuePathহয় stringগুলি।

উদাহরণস্বরূপ লিস্টবক্স ব্যবহার করে:

যদি আপনি আমাকে বলেন listbox1.SelectedValueএটি বর্তমানে নির্বাচিত আইটেমটির পাঠ্য ফিরিয়ে দেবে।

string value = listbox1.SelectedValue;

আপনি যদি আমাকে বলুন listbox1.SelectedItemএটি আপনাকে পুরো বস্তুটি দেবে।

ListItem item = listbox1.SelectedItem;
string value = item.value;

3
SelectedValueএছাড়াও একটি objectএবং একটি না string। দয়া করে এখানে দেখুন
জন_ম

5

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

বাছাই করা আইটেম - নির্বাচিত আইটেমটি প্রদর্শিত হবে যে তথ্য উত্স থেকে প্রকৃত মান আবদ্ধ করতে সাহায্য করে। এটি টাইপ অবজেক্টের এবং আমরা এই সম্পত্তিটির সাথে অবজেক্ট টাইপ থেকে প্রাপ্ত যে কোনও প্রকারকে আবদ্ধ করতে পারি। যেহেতু আমরা আমাদের কম্বো বাক্সগুলির জন্য এমভিভিএম বাঁধাই ব্যবহার করব সেই ক্ষেত্রে এটি সেই সম্পত্তি যা আমরা ভিএমকে অবহিত করতে ব্যবহার করতে পারি যে আইটেমটি নির্বাচন করা হয়েছে।

সিলেক্টডভ্যালু এবং সিলেক্টভ্যালিউপ্যাথ - এই দুটি কম্বোবক্সের জন্য সবচেয়ে বিভ্রান্তিকর এবং ভুল ব্যাখ্যা করা সম্পত্তি। তবে এই বৈশিষ্ট্যগুলি উদ্ধারে আসে যখন আমরা আমাদের কম্বোবক্সকে ইতিমধ্যে তৈরি করা বস্তুর থেকে মানটির সাথে বেঁধে রাখতে চাই। সম্পত্তি সম্পর্কে একটি সংক্ষিপ্ত ধারণা পেতে দয়া করে নীচের তালিকায় আমার শেষ দৃশ্যটি দেখুন।


1

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

আরও সুনির্দিষ্ট হওয়ার জন্য যদি আপনি আক্ষরিকভাবে নির্বাচিত আইটেমের পাঠ্য পুনরুদ্ধার করতে চান তবে আপনি লিখতে পারেন:

ListBox1.SelectedItem.Text;

আপনার লিস্টবক্স 1 সিলেক্টভ্যালু সম্পত্তি ব্যবহার করে পাঠ্যও ফেরত দিতে পারে যদি মানটি আগে সেট করে। তবে উপরে লেখাটি পাওয়ার আরও কার্যকর উপায়।

এখন, মান এমনটি যা ব্যবহারকারীর কাছে দৃশ্যমান নয় তবে এটি বেশিরভাগ ক্ষেত্রে ডাটাবেসে সঞ্চয় করতে ব্যবহৃত হয়। আমরা লিস্টবক্স 1 এর পাঠ্য সন্নিবেশ করি না তবে আমরা এটি সন্নিবেশ করতে পারি তবে আমরা নির্বাচিত আইটেমটির মান সন্নিবেশ করতাম। মান পেতে আমরা ব্যবহার করতে পারেন

ListBox1.SelectedValue

সূত্র

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