ভিওমোডেল-এ INotifyPropertyChanged বনাম নির্ভরতা নির্ভরতা er


353

যখন মডেল-ভিউ-ভিউমোডেল আর্কিটেকচার ডাব্লুপিএফ অ্যাপ্লিকেশনটিতে ভিউমোডেলটি প্রয়োগ করা হয় তখন কীভাবে এটি ডেটাবিনেবলযোগ্য করা যায় তা দুটি প্রধান পছন্দ বলে মনে হয়। আমি বাস্তবায়নগুলি দেখেছি যেগুলি DependencyPropertyবৈশিষ্ট্যগুলির জন্য ব্যবহার করে যা ভিউটি আবদ্ধ করে চলেছে এবং আমি এর INotifyPropertyChangedপরিবর্তে ভিউমোডেলটি বাস্তবায়ন করতে দেখেছি ।

আমার প্রশ্ন হল আমি কখন অন্যের চেয়ে বেশি পছন্দ করব? পারফরম্যান্সের কোনও পার্থক্য আছে? ডাব্লুপিএফ-এ ভিউমোডেল নির্ভরতা দেওয়া কি সত্যিই ভাল ধারণা? ডিজাইনের সিদ্ধান্ত নেওয়ার সময় আমার আর কী বিবেচনা করা উচিত?


11
দেখতে stackoverflow.com/questions/1329138/... INotifyPropertyChanged বাস্তবায়নে একটি কম্পাইলার চেক করা উপায় জন্য। ম্যাজিক স্ট্রিং হিসাবে সম্পত্তি নাম থাকা এড়ানো।
ইয়ান রিংরোজ

10
সাধারণত কোনও শ্রেণীর নির্ভরতা সম্পত্তি এবং একটি সাধারণ সম্পত্তির মধ্যে একটি প্রধান পার্থক্য থাকে যা INotifyPropertyChanged প্রয়োগ করে। নির্ভরশীল বৈশিষ্ট্য ডেটা বাঁধতে উত্স বা লক্ষ্য হতে পারে তবে INotifyPropertyChanged সমর্থন সহ সাধারণ বৈশিষ্ট্যগুলি কেবল উত্স হিসাবে ব্যবহৃত হতে পারে। সুতরাং এই সমাধানগুলি সম্পূর্ণরূপে বিনিময়যোগ্য নয়। ডেটা বাইন্ডিং অবকাঠামোটির কাজ করার লক্ষ্য হিসাবে একটি ডিপি প্রয়োজন, তবে উত্স হয় আইএনটিফাইপ্রোট্টি চেঞ্জড সমর্থন বা একটি সাধারণ ডিপি সহ একটি সাধারণ সম্পত্তি।
মোস্তফা রেজায়ে

4
.NET 4.5 বাস্তবায়নের জন্য স্ট্যাকওভারফ্লো.com/a/10595688/200442 দেখুন INotifyPropertyChanged
ড্যানিয়েল লিটল

এখানে সর্বোত্তমভাবে ব্যাখ্যা করা হয়েছে stackoverflow.com/a/3552550/366064
বিজান

উত্তর:


214

কেন্ট এই বিষয়টি সম্পর্কে একটি আকর্ষণীয় ব্লগ লিখেছেন: মডেলগুলি দেখুন: পপসিও বনাম নির্ভরতা অবজেক্টস

সংক্ষিপ্ত সারাংশ:

  1. নির্ভরতা অবজেক্টস সিরিয়ালযোগ্য হিসাবে চিহ্নিত করা হয় না
  2. ডিপেন্ডেন্সিঅবজেক্ট শ্রেণি সমান () এবং গেটহ্যাশকোড () পদ্ধতিগুলিকে ওভাররাইড করে এবং সিল করে
  3. ডিপেন্ডেন্সিঅবজেক্টের থ্রেডের সখ্যতা রয়েছে - এটি কেবল যে থ্রেডটিতে তৈরি হয়েছিল তার উপরেই এটি অ্যাক্সেস করা যায়

আমি পোকো পদ্ধতির পছন্দ করি। উপস্থাপনা মডেল (ওরফে ভিউমোডেল) এর জন্য একটি বেস ক্লাস যা INotifyPropertyChanged ইন্টারফেস প্রয়োগ করে এখানে পাওয়া যাবে: http://compositeextensions.codeplex.com


24
ডিপেন্ডেন্সিঅবজেক্ট ডাব্লুপিএফ লাইব্রেরিগুলির উপরও নির্ভরতা নেয়, যেখানে পোকো না দেয়, যেখানে আপনার ভিউ মডেলগুলিকে এমন কিছু অন্যান্য ইউআই স্ট্যাক চালাতে দেয় যেখানে ডাব্লুপিএফ উপলব্ধ নেই (কমপ্যাক্ট ফ্রেমওয়ার্ক, মনো)।
কোডকাইজন

26
তবে এটি স্পষ্ট যে Dependecy বৈশিষ্ট্যগুলি কেবলমাত্র ইউআই এর জন্য নির্মিত এবং ব্যবসায়ের স্তরের জন্য নয়।
আন্দ্রে রেনিয়া

11
নির্ভরতা বৈশিষ্ট্যগুলির জন্য একটি নির্ভরতা অবজেক্ট পিতামাতারও প্রয়োজন। আপনার ভিউমোডেলটি নির্ভর করে নির্ভরতা অবজেক্ট থেকে উত্তরাধিকার সূত্রে নেওয়া উচিত নয়।
গাসডোর

38

ডাব্লুপিএফ কর্মক্ষমতা গাইড অনুসারে, নির্ভরশীলতা সংস্থা অবশ্যই ইনোফাইপ্রোপার্টিচেনজড প্রয়োগকারী POCO এর চেয়ে আরও ভাল সম্পাদন করে:

http://msdn.microsoft.com/en-us/library/bb613546.aspx


1
: আমি যে এক ;-) উপর একমত হতে হবে blog.lexique-du-net.com/index.php?post/2010/02/24/...
Jonatha Antoine

আপনি যদি নেট ফ্রেমওয়ার্ক সংস্করণ 4 নির্বাচন করেন তবে লিঙ্কটি এখনও কাজ করে। এটি কেবল "বর্তমান সংস্করণ" এর জন্য উপলভ্য নয়।
ডাবল ইউ

এটি দেখানোর জন্য ধন্যবাদ, অনেকগুলি কলঙ্কজনক ভুল তথ্য রয়েছে যা ডিভস দাবিদার করে যে INotifyPropertyChanged দ্রুত এবং DPs এর চেয়ে কম ওভারহেড অনুপ্রবেশ করে এবং এটি কেবল ভিত্তিহীন। ডিপিগুলি ভার্চুয়াল (ডেটা) ট্রিটিকে কাঠামোগতভাবে সংজ্ঞায়িত করার জন্য দ্রুত, মার্জিত এবং শক্তিশালী উপায়।
tpartee

ডিপেন্ডেন্সিঅবজেক্টগুলির কাছে একটি লুকানো মন্দ। তাদের যে নিয়ন্ত্রণগুলি আবদ্ধ করে সেগুলি একই থ্রেডে তৈরি করা দরকার। তার মানে জিইউআই থ্রেড। এর অর্থ আপনাকে সেই থ্রেডে সৃষ্টি প্রেরণ করতে হবে। উদাহরণস্বরূপ আপনি ডিবি থেকে কিছু ব্যাকগ্রাউন্ড থ্রেডে এই জিনিসগুলি লোড এবং তৈরি করতে পারবেন না। আপনি যদি না সৃষ্টি প্রেরণ করেন। উন্মাদ।
এডি 22

28

পছন্দটি সম্পূর্ণ আপনার ব্যবসায়ের যুক্তি এবং UI বিমূর্ত স্তর স্তরের উপর ভিত্তি করে। আপনি যদি কোনও ভাল বিচ্ছেদ চান না তবে ডিপি আপনার পক্ষে কাজ করবে।

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

এই পোস্টটিও উল্লেখ করুন - /programming/275098/ কি- অ্যাপ্লিকেশন-could-i-study-to-:30:30-datamodel-view- ভিউ মডেল । লিঙ্কটিতে মডেল-ভিউ-ভিউমোডেল প্যাটার্নের অনেকগুলি উল্লেখ রয়েছে যা এই আলোচনার সাথে খুব প্রাসঙ্গিক।


9
জেবি পোস্টটি পার্থক্যগুলিকে আরও সঠিকভাবে উত্তর দেয়। ডিপেন্ডেন্সিঅবজেক্টের কাছ থেকে প্রাপ্ত কোনও ভিএম (বা উপস্থাপক) এর অর্থ এই নয় যে এটি স্টাইল করা যাবে না বা যুক্তিযুক্তভাবে ভিউ থেকে পৃথক নয়, তার অর্থ কেবলমাত্র সম্পত্তি মানগুলির জন্য স্টোরেজটি স্পষ্টভাবে ঘোষিত ক্ষেত্রগুলির চেয়ে আলাদা পোকো স্টাইল। বলা হচ্ছে, সিরিয়ালাইজেশন, যৌক্তিক সাম্যতা এবং থ্রেড অ্যাফিনিটি হ'ল বাস্তব সমস্যা যা ডিপেন্ডেন্সিঅবজেক্ট ভিত্তিক ভিএমগুলিকে মোকাবেলা করতে হবে।
micahtan

"এছাড়াও আইএনটিফাইপ্রোপার্টি চেঞ্জডের চেয়ে ডিপির জন্য আরও বেশি ব্যয় হয়" - আপনার প্রমাণের উত্সটি কোথায়? প্রচুর ডেভস এটিকে সমর্থন করার জন্য কোনও প্রমাণ ছাড়াই এই দাবি করে। এমএসডিএন অনুসারে এটি সত্য নয়। "ইউআই এবং ভিউমোডেলকে সম্পূর্ণ আলাদা ডিজাইনের চেষ্টা করুন যাতে যে কোনও সময়ে আমরা লেআউট এবং ইউআই নিয়ন্ত্রণগুলিকে পরিবর্তন করতে পারি" - আবার, এর সাথে পোকো + প্রোপ চেঞ্জ বনাম ডিও / ডিপি-এর কোনও মিল নেই। যদি কিছু হয় তবে ডিও / ডিপি-তে প্রতিবিম্ব এবং পথের রেজিস্ট্রি ভিজ্যুয়াল দিকে কাজ করার আপনার দক্ষতা উন্নত করে।
tpartee

20

একটি অভিব্যক্তি দৃষ্টিভঙ্গি থেকে, আমি পুরোপুরি নির্ভরতা বৈশিষ্ট্য এবং চিন্তায় cringe ব্যবহার করে উপভোগ করি INotifyPropertyChangedstringইভেন্টের সাবস্ক্রিপশনের কারণে সম্পত্তিটির নাম এবং সম্ভাব্য মেমরি ফাঁস ছাড়াও INotifyPropertyChangedঅনেক বেশি স্পষ্ট পদ্ধতি mechanism

নির্ভরতা বৈশিষ্ট্যগুলি বোঝায় "যখন এটি হয় তখন তা করুন" সহজে বোঝা যায় স্ট্যাটিক মেটাডেটা ব্যবহার করে। এটি একটি ঘোষণামূলক পদ্ধতি যা আমার কমনীয়তার জন্য ভোট পায়।


1
স্ট্রিং অংশে এখন নামফলক অপারেটরের সাথে একটি সমাধান রয়েছে।
নিউটোপিয়ান

@ নিউটোপিয়ান: সত্য। এর সাথে কিছু আকর্ষণীয় জিনিসও সম্ভব [CallerMemberName]
ব্রায়ান ওয়াটস

কোনও পোকো বনাম ডিও / ডিপি মডেল ব্যবহার করার সময় ডাব্লুপিএফ এবং সিএলআরতে সম্পদ নিবন্ধকরণ (প্রতিচ্ছবি) সুবিধাগুলির উল্লেখ না করা।
tpartee

16

INotifyPropertyChanged যখন ব্যবহার করা হয় তা আপনাকে আপনার গেটারদের কোড এবং আপনার সম্পত্তিগুলির সেটারের কোডে আরও যুক্তি যুক্ত করার ক্ষমতাও দেয়।

DependencyProperty উদাহরণ:

public static DependencyProperty NameProperty = DependencyProperty.Register( "Name", typeof( String), typeof( Customer ) );

public String Name
{
    set { SetValue( NameProperty, value ); }
    get { return ( String ) GetValue( NameProperty ); }
}

আপনার গেটর এবং সেটারে --- আপনি যা করতে পারেন তা হ'ল যথাক্রমে সেটওয়ালু এবং গেটভ্যালু কল করুন, ফ্রেমওয়ার্কের অন্যান্য অংশে খ / সি গেটর / সেটার বলা হয় না, পরিবর্তে এটি সরাসরি সেটওয়ালু, গেটভ্যালু কল করে, সুতরাং আপনার সম্পত্তি যুক্তি যুক্ত করবে না নির্ভরযোগ্যভাবে মৃত্যুদন্ড কার্যকর করা।

সহ INotifyPropertyChanged, একটি ইভেন্ট সংজ্ঞায়িত করুন:

public event PropertyChangedEventHandler PropertyChanged;

এবং তারপরে আপনার কোডের যে কোনও জায়গায় কেবল কোনও যুক্তি রয়েছে, তারপরে কল করুন:

// ...
// Something cool...
// ...

if( this.PropertyChanged != null )
{
    PropertyChanged( this, new PropertyChangedEventArgs( "Name" ) );
}

// More cool stuff that will reliably happen...

এটি কোনও গিটার / সেটারে বা অন্য কোথাও হতে পারে।


11
আপনি নির্ভরশীলতা থেকেও পরিবর্তন বিজ্ঞপ্তিগুলি পেতে পারেন। প্রোপার্টিমেটাটাটা.প্রপার্টিচেনজডক্যালব্যাক দেখুন। উদাহরণ এ: এমএসডিএন.মাইক্রোসফট /en-us/library/ms745795.aspx
জো হোয়াইট

2
এছাড়াও, আপনি কেবল সম্পত্তির অভ্যন্তর থেকে নয়, যে কোনও জায়গা থেকেও
সেটভ্যালুকে

এটি বিভ্রান্তিমূলক এবং অসত্য - একটি অভ্যন্তরীণভাবে পরিবর্তিত হয়েও কোনও ডিপিতে পরিবর্তিত ইভেন্টগুলিতে ডুবে থাকার একাধিক উপায় রয়েছে। এর মধ্যে একটি উপরে জো হোয়াইট দ্বারা নির্দেশিত হয়েছিল
tpartee

16

নির্ভরতা বৈশিষ্ট্যগুলি ডেটা বন্ডিংয়ের উত্স হিসাবে নয়, ইউআই উপাদানগুলিতে বাইন্ডিং (লক্ষ্য হিসাবে) সমর্থন করার উদ্দেশ্যে তৈরি করা হয়, এটিই ইনোটিফাইপার্টি আসে a খাঁটি দৃষ্টিকোণ থেকে আপনার ভিউমোডেলগুলিতে ডিপি ব্যবহার করা উচিত নয়।

"বাইন্ডিংয়ের উত্স হওয়ার জন্য কোনও সম্পত্তির নির্ভরতা সম্পত্তি হওয়ার দরকার নেই; আপনি যে কোনও সিএলআর সম্পত্তি একটি বাধ্যতামূলক উত্স হিসাবে ব্যবহার করতে পারেন, তবে, বাধ্যবাধকতার টার্গেট হওয়ার জন্য, সম্পত্তি অবশ্যই একটি হতে হবে নির্ভরতা সম্পত্তি effective একমুখী বা দ্বিমুখী বাঁধাই কার্যকর হওয়ার জন্য, উত্সের সম্পত্তিটি অবশ্যই বাধ্যতামূলক সিস্টেম এবং এইভাবে লক্ষ্যবস্তুতে প্রচার করে এমন পরিবর্তন সম্পর্কিত বিজ্ঞপ্তিগুলি সমর্থন করে custom কাস্টম সিএলআর বাইন্ডিং উত্সগুলির জন্য, এর অর্থ সম্পত্তিটি অবশ্যই INotifyPropertyChanged সমর্থন করবে। সংগ্রহগুলিতে আইএনটিফায়ার কালেকশন পরিবর্তিত সমর্থন করা উচিত ""

সমস্ত নির্ভরশীল অবজেক্ট সিরিয়াল করা যায় না (এটি ভিউমোডেলস এবং ডিটিও (পোকো) এর ব্যবহারকে বাধা দিতে পারে)।

ডাব্লুপিএফের তুলনায় সিলভারলাইটের মধ্যে ডিপির মধ্যে পার্থক্য রয়েছে।

http://msdn.microsoft.com/en-us/library/cc221408(v=VS.95).aspx

http://msdn.microsoft.com/en-us/library/cc903933(VS.95).aspx


আমি ইস্যু ছাড়াই ২০০৯ সাল থেকে সিরিয়ালাইজড ডিপেন্ডেন্সি অবজেক্টগুলি ব্যবহার করছি, সুতরাং আপনি যখন "সমস্ত নির্ভরশীল অবজেক্টগুলিকে সিরিয়ালাইজ করা যায় না" বলবেন তখন আপনি কী সম্পর্কে কথা বলছেন তা নিশ্চিত হন না - হ্যাঁ তারা পারে। প্রকৃতপক্ষে অনেকগুলি বিকল্প রয়েছে: কোডেপ্রজেক্ট / আর্টিকেলস / 14১৪৪০/২ এম্পেসেস ডটকম / ২০০৮ / 11 / 25 / d dependenderproperty- seialization এবং আমার ব্যক্তিগত পছন্দের একটি: আপনার সমস্ত ডিপিদের জন্য কেবল ব্যাকিং স্টোর সরবরাহ করুন এবং সেগুলি সিরিয়ালযোগ্য করে তুলুন ( গুগলে অনুসন্ধানের 2 মিনিটের মধ্যে কোনও ভাল সাধারণ উদাহরণ সহজেই পাওয়া যায় নি, তবে আমি আপনাকে এই কাজটি করার আশ্বাস দিচ্ছি)।
tpartee

7

আমাকেও সম্প্রতি এই সিদ্ধান্তটি বিবেচনা করতে হয়েছিল।

আমি দেখতে পেয়েছি যে INotifyPropertyChanged মেকানিজম আমার প্রয়োজনের জন্য আরও বেশি উপযুক্ত me কারণ এটি আমাকে আমার জিইউআইকে নকল অবস্থা ছাড়াই একটি বিদ্যমান ব্যবসায়িক লজিক কাঠামোর সাথে আটকানোর অনুমতি দেয়। আমি যে কাঠামোটি ব্যবহার করছিলাম তার নিজস্ব পর্যবেক্ষক ধরণ ছিল এবং বিজ্ঞপ্তির একটি স্তরটি পরবর্তীটিতে ফরোয়ার্ড করা সহজ। আমার কেবল একটি ক্লাস ছিল যা আমার ব্যবসার লজিক কাঠামো এবং INotifyPropertyChanged ইন্টারফেস থেকে পর্যবেক্ষক ইন্টারফেস প্রয়োগ করেছিল।

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

সুতরাং এখানে আমি INOTIFPropertyChanged ব্যবসার যুক্তি থেকে GUI- এ সম্পত্তি প্রকাশের জন্য আরও উন্নত দেখতে পেয়েছি।

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

সুতরাং সেখানে আমি জিপিআই থেকে জিইউআই বিজ্ঞপ্তির জন্য ডিপি দরকারী পেয়েছি।


6

ডাব্লুপিএফ-এ ভিউমোডেল নির্ভরতা দেওয়া কি সত্যিই ভাল ধারণা?

.NET 4.0 এর System.Xaml.dll থাকবে, সুতরাং এটির ব্যবহারের জন্য আপনাকে কোনও স্বেচ্ছাসেবী কাঠামোর উপর নির্ভরতা নিতে হবে না। তার পিডিসি অধিবেশন সম্পর্কে রব রেলেয়ার পোস্টটি দেখুন ।

আমার গ্রহণ

এক্সএএমএল হ'ল অবজেক্টগুলিকে বর্ণনা করার জন্য একটি ভাষা এবং ডাব্লুপিএফ এমন একটি কাঠামো যার বর্ণিত অবজেক্টগুলি ইউআই উপাদান।

তাদের সম্পর্কটি সি # এর মতো, লজিক বর্ণনার জন্য একটি ভাষা এবং। নেট, একটি কাঠামো যা নির্দিষ্ট ধরণের যুক্তিকে প্রয়োগ করে।

এক্সএএমএল এর উদ্দেশ্য হ'ল ঘোষিত বস্তু গ্রাফ। ডাব্লু * এফ প্রযুক্তিগুলি এই দৃষ্টান্তের জন্য দুর্দান্ত প্রার্থী, তবে এক্সএএমএল সেগুলির মধ্যে স্বাধীনভাবে বিদ্যমান।

এক্সএএমএল এবং পুরো নির্ভরশীলতা সিস্টেমটি ডাব্লুএফ এবং ডাব্লুপিএফের জন্য পৃথক স্ট্যাক হিসাবে প্রয়োগ করা হয়েছিল, সম্ভবত তাদের মধ্যে নির্ভরতা তৈরি না করেই কোনও দল (কোনও পাং উদ্দেশ্যে নয়) তৈরির অভিজ্ঞতা অর্জনের জন্য।


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

6

নির্ভরতা বৈশিষ্ট্য হ'ল কাস্টম নিয়ন্ত্রণ তৈরির আঠালো। আপনি যদি এক্সএএমএল ডিজাইনের সময় বৈশিষ্ট্য উইন্ডোতে আপনার সম্পত্তিগুলি দেখানোর জন্য ইন্টেলি-ইন্দ্রিয় ব্যবহার করতে আগ্রহী হন তবে আপনাকে অবশ্যই নির্ভরতা বৈশিষ্ট্য ব্যবহার করতে হবে। আইএনপিসি ডিজাইনের সময় সম্পত্তি উইন্ডোতে কখনই কোনও সম্পত্তি দেখায় না।


4

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

তবে আপনার ভিউমোডেল INotifyPropertyChanged ব্যবহার করা ভাল using INotifyPropertyChanged ব্যবহার করা আপনার প্রয়োজন হলে গিটার / সেটার যুক্তি রাখার ক্ষমতা দেয়।

আমি ইতিমধ্যে INotifyPropertyChanged প্রয়োগ করে এমন ভিউমোডেলের জন্য জোশ স্মিথের বেস ক্লাসের সংস্করণটি পরীক্ষা করার পরামর্শ দিচ্ছি:

http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/

আমি মনে করি এটি ভিউমোডেল কীভাবে করবেন তার একটি দুর্দান্ত উদাহরণ।


4

আমি মনে করি DependencyProperty এবং INotifyPropertyChanged দুটি বাঁধাইয়ের জন্য আলাদা আলাদা দুটি জিনিসের জন্য ব্যবহৃত হয়: প্রথম কোনও সম্পত্তিকে একটি বাঁধাইয়ের লক্ষ্য হতে সক্ষম করার জন্য এবং অন্য কোনও সম্পত্তি থেকে ইনপুট গ্রহণ করা (সম্পত্তি নির্ধারণের জন্য {বাঁধাই ... use ব্যবহার করুন), সর্বশেষ যখন আপনি চান যে কোনও সম্পত্তির মান একটি বাঁধার উত্স হিসাবে ব্যবহৃত হয় (বাইন্ডিং পাথ এক্সপ্রেশন নাম)। সুতরাং পছন্দটি নিছক প্রযুক্তিগত।


2
কোনও আইএনওটিফাইপ্রোট্টি চেঞ্জড উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে। আপনি এটিতে টুওয়ে বাঁধতে পারেন। একটি ভিউ অবজেক্টে সঞ্চালিত কিছু ক্রিয়াকলাপের জন্য প্রযুক্তিগত কারণে ডিপেন্ডেনসিপ্রোপার্টি প্রয়োজন (উদাহরণস্বরূপ, এক্সএএমএল-এ কোনও ভিউ অবজেক্ট ইনস্ট্যান্ট করার সময় কিছু সম্পত্তি সেট করা)। ভিউমোডেলের জন্য কখনই একটি নির্ভরতা প্রপার্টি প্রয়োজন হয় না।
ওলিও

3

আমি আরও সরাসরি পদ্ধতির পছন্দ করি, যা আমি ব্লগ করেছিলাম আইএনটিফাইপ্রোট্টি চ্যাঞ্জড ছাড়াই উপস্থাপনা মডেলটিতে করেছি । ডেটা বাইন্ডিংয়ের বিকল্প ব্যবহার করে, আপনি কোনও বুককিপিং কোড ছাড়াই সরাসরি সিএলআর বৈশিষ্ট্যে আবদ্ধ করতে পারেন। আপনি কেবল আপনার ভিউ মডেলটিতে সাধারণ-পুরাতন .NET কোডটি লিখেন এবং আপনার ডেটা মডেল পরিবর্তন হলে এটি আপডেট হয়।


ছাড়া INotifyPropertyChanged, PropertyDescriptorব্যবহৃত হয়, যা মেমরি ফাঁসের
তিলক

আমি সেই ব্লগ পোস্টে উপস্থাপন করি আপডেট কন্ট্রোল লাইব্রেরিতে সম্পত্তি বর্ণনাকারী নয়, দুর্বল উল্লেখগুলি ব্যবহার করা হয়। এটি স্মৃতি ফাঁস করে না।
মাইকেল এল পেরি

1
মাইকেল, আপনার লাইব্রেরি প্রচুর কোড উত্পন্ন করে। আমি সুবিধা দেখতে পাচ্ছি না। উত্পন্ন প্রপার্টি চেঞ্জড ইভেন্ট কল সহ মডেল মোড়ক জেনারেট করে আমি এটি অর্জন করতে পারি।
ডের_মিস্টার

3

কেন কেবল একটি জিনিস পছন্দ করা যায় DependencyObject- বাইন্ডিং আরও ভাল কাজ করবে। কেবলমাত্র ListBoxএবং এর সাথে একটি উদাহরণ চেষ্টা করুন TextBox, INotifyPropertyChangedবনাম সম্পত্তি থেকে ডেটা সহ তালিকা তৈরি করুন DependencyPropertyএবং বর্তমান আইটেমটি সম্পাদনা করুন TextBox...


1
কোড নমুনা, দয়া করে
হাসান তারেক

1

আপনি যদি অন্যান্য নিয়ন্ত্রণগুলিতে সম্পত্তিগুলি প্রকাশ করতে চান তবে আপনাকে অবশ্যই নির্ভরতা বৈশিষ্ট্যগুলি ব্যবহার করতে হবে ... তবে সৌভাগ্য যেহেতু তারা কিছুটা সময় নিবে ...

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