IDataErrorInfo এবং INotifyDataErrorInfo দুটি ইন্টারফেস MVVM প্যাটার্নে ডেটা ভ্যালিডেশন (Data Validation) করার জন্য ব্যবহৃত হয়। যখন একটি অ্যাপ্লিকেশন ইউজার ইনপুট নেয়, তখন ডেটা সঠিক কিনা তা যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। এই দুইটি ইন্টারফেস আপনাকে আপনার অ্যাপ্লিকেশন ডেটার ভ্যালিডেশন ম্যানেজ করতে সাহায্য করে, এবং MVVM প্যাটার্নে ViewModel-এ এই ভ্যালিডেশনকে ইনক্লুড করা হয়।
IDataErrorInfo ইন্টারফেসটি একটি সিঙ্গল প্রপার্টি এবং একটি মেথড প্রদান করে, যা UI কে জানাতে সাহায্য করে যে কোনো প্রপার্টি বৈধ কিনা। যখন কোনো ViewModel এর প্রপার্টি ত্রুটি ঘটায়, তখন IDataErrorInfo এর মাধ্যমে একটি ত্রুটি বার্তা প্রদর্শন করা হয়। এটি সাধারণত সিঙ্গেল প্রপার্টির ভিত্তিতে ত্রুটি যাচাইয়ের জন্য ব্যবহৃত হয়।
public class Product : IDataErrorInfo
{
private string _name;
private decimal _price;
public string Name
{
get { return _name; }
set { _name = value; }
}
public decimal Price
{
get { return _price; }
set { _price = value; }
}
public string Error
{
get { return "There are some errors in the product."; }
}
public string this[string columnName]
{
get
{
string errorMessage = null;
// Checking for validation on 'Name'
if (columnName == "Name" && string.IsNullOrEmpty(_name))
{
errorMessage = "Name cannot be empty.";
}
// Checking for validation on 'Price'
if (columnName == "Price" && _price <= 0)
{
errorMessage = "Price must be greater than zero.";
}
return errorMessage;
}
}
}
এখানে:
this[string columnName]
) নির্দিষ্ট প্রপার্টি অনুযায়ী ত্রুটি বার্তা প্রদান করে।IDataErrorInfo এর মাধ্যমে ViewModel এর প্রপার্টি ভ্যালিডেশনের ত্রুটি পরিচালনা করা যায়, এবং View তে ওই ত্রুটির বার্তা প্রদর্শন করা হয়।
INotifyDataErrorInfo ইন্টারফেসটি IDataErrorInfo এর মতোই কাজ করে, তবে এতে কিছু উন্নত ফিচার রয়েছে। INotifyDataErrorInfo একটি ইভেন্টের মাধ্যমে ডেটা ত্রুটি পরিবর্তন সিগন্যাল পাঠাতে সাহায্য করে, যাতে UI তে ত্রুটি বার্তা সহজে আপডেট করা যায়। এটি বিশেষভাবে যখন ভ্যালিডেশন পরিবর্তিত হয়, তখন UI কে জানাতে সহায়ক হয়, যেমন একটি ফর্মে কোনো ত্রুটি ঘটলে তা সঠিকভাবে প্রতিফলিত হয়।
public class Product : INotifyDataErrorInfo
{
private string _name;
private decimal _price;
private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();
public string Name
{
get { return _name; }
set
{
_name = value;
ValidateName();
}
}
public decimal Price
{
get { return _price; }
set
{
_price = value;
ValidatePrice();
}
}
public bool HasErrors => _errors.Any();
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public IEnumerable GetErrors(string propertyName)
{
if (_errors.ContainsKey(propertyName))
{
return _errors[propertyName];
}
return null;
}
private void ValidateName()
{
if (string.IsNullOrEmpty(_name))
{
AddError("Name", "Name cannot be empty.");
}
else
{
RemoveError("Name");
}
}
private void ValidatePrice()
{
if (_price <= 0)
{
AddError("Price", "Price must be greater than zero.");
}
else
{
RemoveError("Price");
}
}
private void AddError(string propertyName, string error)
{
if (!_errors.ContainsKey(propertyName))
{
_errors[propertyName] = new List<string>();
}
if (!_errors[propertyName].Contains(error))
{
_errors[propertyName].Add(error);
OnErrorsChanged(propertyName);
}
}
private void RemoveError(string propertyName)
{
if (_errors.ContainsKey(propertyName))
{
_errors[propertyName].Clear();
OnErrorsChanged(propertyName);
}
}
private void OnErrorsChanged(string propertyName)
{
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
}
}
এখানে:
true
বা false
রিটার্ন করবে।IDataErrorInfo এবং INotifyDataErrorInfo দুটি ইন্টারফেস ডেটা ভ্যালিডেশন পরিচালনা করতে ব্যবহৃত হয়। IDataErrorInfo সরল এবং সোজা ইন্টারফেস, যা মূলত প্রপার্টির জন্য ভ্যালিডেশন বার্তা সরবরাহ করে। অন্যদিকে, INotifyDataErrorInfo উন্নত এবং ডাইনামিক ভ্যালিডেশন ম্যানেজমেন্ট সরবরাহ করে, যা UI তে ত্রুটি আপডেট করার জন্য ইভেন্ট ব্যবহার করে। MVVM প্যাটার্নে এই ইন্টারফেসগুলো ViewModel এর মধ্যে ডেটা ভ্যালিডেশন নিশ্চিত করতে ব্যবহৃত হয়, যাতে ব্যবহারকারীর ইনপুট ত্রুটি শোধরানো যায়।
common.read_more