ডাব্লুপিএফ ডেটা বাঁধাই এবং বৈধকরণের নিয়ম সেরা অভ্যাস


101

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

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

উত্তর:


83

আমি মনে করি নতুন পছন্দসই উপায় হ'ল IDataErrorInfo ব্যবহার করা

এখানে আরও পড়ুন


3
আমি সিঞ্চ ফ্রেমওয়ার্ক ( cinch.codeplex.com )ও পেয়েছি , যা ডাব্লুপিএফ + এমভিভিএম-এ সেরা অনুশীলনের বৈধতার একটি ডেমো অন্তর্ভুক্ত করে এবং IDataErrorInfo ব্যবহার করে
মার্ক হিথ

3
.NET 4.5-এ আপনি INotifyErrorInfo ব্যবহার করতে পারেন যা আপনাকে কেবল স্ট্রিংয়ের পরিবর্তে অবজেক্টগুলি ফিরিয়ে আনতে দেয়।
পিটার

24

মাইক্রোসফট এর দশক থেকে প্যাটার্নস & অভ্যাস ডকুমেন্টেশন :

ডেটা বৈধকরণ এবং ত্রুটি প্রতিবেদন

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

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

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

কীভাবে IDataErrorInfo এবং INotifyDataErrorInfo প্রয়োগ করতে হয় তা ব্যাখ্যা করতে ডকুমেন্টেশন এগিয়ে যায়।


3
আমি প্রথমে চিন্তিত হয়েছি যখন আমি নিক্ষেপটি ব্যতিক্রমের প্রস্তাব দিয়েছিলাম। "এইভাবে সম্পত্তি সহ এই ব্যতিক্রম ছুঁড়ে ফেলা উচিত যেখানে সম্ভব হবে তা দেখে খুশি"
কেনওয়ারার

22
এটিও লক্ষ করা উচিত যে মাইক্রোসফ্টের কিছু মুপ্পেট আইএনটিফাইডাটা এরিরআইএনফো কে। নেট 4 এ অন্তর্ভুক্ত না করার সিদ্ধান্ত নিয়েছে তবে কেবল সিলভারলাইটে in এটি একটি বেদনা ..
aL3891

5
@ এই .NET 4.5- সাজানো হবে al3891- msdn.microsoft.com/en-us/library/...
RichardOD

@ aL3891 অনুপস্থিত INotifyDataErrorInfo এর কোন বিকল্প আছে কি?
এজেন্টকনফফ

10

ব্যক্তিগত, আমি বৈধতা হ্যান্ডেল ব্যতিক্রম ব্যবহার করছি। এটি নিম্নলিখিত পদক্ষেপ প্রয়োজন:

  1. আপনার ডেটা বাইন্ডিং এক্সপ্রেশনটিতে আপনাকে "ValidatesOnException = True" যুক্ত করতে হবে
  2. আপনি যে ডেটা অবজেক্টে আবশ্যক সেটিতে আপনাকে DependencyPropertyChanged Handler যুক্ত করতে হবে যেখানে আপনি পরীক্ষা করতে পারেন যে নতুন মান আপনার শর্ত পূরণ করে - যদি না - আপনি বস্তুর পুরাতন মানটিকে পুনরুদ্ধার করেন (যদি আপনার প্রয়োজন হয়) এবং আপনি ব্যতিক্রম নিক্ষেপ করেন।
  3. আপনার নিয়ন্ত্রণ টেমপ্লেটে আপনি নিয়ন্ত্রণে অবৈধ মান প্রদর্শনের জন্য ব্যবহার করেন, আপনি ত্রুটি সংগ্রহ এবং অ্যাক্সেস ব্যতিক্রম বার্তা অ্যাক্সেস করতে পারেন।

এখানে কৌতুকটি কেবল অবজেক্টের সাথে আবদ্ধ করা যা নির্ভরশীল অবজেক্ট থেকে প্রাপ্ত। INotifyPropertyChanged এর সরল বাস্তবায়ন কাজ করবে না - ফ্রেমওয়ার্কে একটি ত্রুটি রয়েছে, যা আপনাকে ত্রুটি সংগ্রহে অ্যাক্সেস করা থেকে বাধা দেয়।


3

এছাড়াও এই নিবন্ধটি পরীক্ষা করুন । ধারণা করা যায় মাইক্রোসফ্ট তাদের নিদর্শন এবং অনুশীলনগুলি থেকে তাদের এন্টারপ্রাইজ লাইব্রেরি (v4.0) প্রকাশ করেছে যেখানে তারা বৈধকরণের বিষয়টি কভার করে তবে Wশ্বর জানেন যে তারা ডাব্লুপিএফের জন্য বৈধতা কেন অন্তর্ভুক্ত করেনি, তাই ব্লগ পোস্টটি আমি আপনাকে যেভাবে নির্দেশ দিচ্ছি, ব্যাখ্যা করেছেন লেখক কী এটি অভিযোজিত করতে। আশাকরি এটা সাহায্য করবে!


2

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


0

যদি আপনার ব্যবসায়ের শ্রেণিটি সরাসরি আপনার ইউআই দ্বারা ব্যবহৃত হয় তবে IDataErrorInfo ব্যবহার করা পছন্দনীয় কারণ এটি যুক্তিটিকে তাদের মালিকের কাছাকাছি রাখে।

যদি আপনার ব্যবসায়িক শ্রেণি যদি কোনও ডাব্লুসিএফ / এক্সএমএলওয়েব পরিষেবাদির রেফারেন্স দ্বারা নির্মিত একটি স্টাব ক্লাস হয় তবে আপনি অবশ্যই IDataErrorInfo ব্যবহার করতে পারবেন না বা এক্সেপশনভিডেশন রুলের সাথে ব্যবহারের জন্য ব্যতিক্রম নিক্ষেপ করতে পারবেন না। পরিবর্তে আপনি পারবেন:

  • কাস্টম বৈধকরণ বিধি ব্যবহার করুন।
  • আপনার ডাব্লুপিএফ ইউআই প্রকল্পে একটি আংশিক শ্রেণীর সংজ্ঞা দিন এবং IDataErrorInfo প্রয়োগ করে।

1
আমি জানি এটি পুরানো, তবে আমি আশা করছি অ্যালেক্স প্রতিক্রিয়া জানাতে সক্ষম হবে। আমি এই সিদ্ধান্তে এসে পৌঁছলাম তবে সমস্যাটি হ'ল আপনাকে বৈধকরণের নিয়মের ক্ষেত্রে "উদাহরণস্বরূপ" একটি "বয়স" সম্পত্তি যা 100 এর চেয়ে বড় হতে পারে না তার জন্য কিছু বৈধতা লিখতে হবে, তারপরে IDataErrorInfo ইন্টারফেসে একই যুক্তিটি পুনরাবৃত্তি করুন , যা যুক্তি সদৃশ। যে প্রায় কোনো উপায় আছে কি?
JFTxJ

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

না, বৈধতা যুক্তির সদৃশটি IDataErrorInfo এবং কাস্টম বৈধকরণ বিধিতে রয়েছে ... যেহেতু কাস্টম বৈধকরণ নিয়মটি ডেটা বৈধ করার একমাত্র উপায় হ'ল আগে বাউন্ড অবজেক্টে এটি আপডেট করা হয়, সেই বৈধতা (বয়স অবশ্যই কম হতে হবে) তারপরে 100) একটি "প্রতি ক্ষেত্র" বার্তা ফেরত দিতে IDataErrorInfo এ সংজ্ঞায়িত করা দরকার তবে কাস্টম বৈধকরণ বিধিতেও এটি প্রয়োগ করা উচিত। বোধ হয়?
JFTxJ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.