मुझे किसी भी लाइब्रेरी से अवगत नहीं है जो यह करता है - लेकिन आप अपना खुद का आसानी से लिख सकते हैं। इस कोड में कुछ तफ़सील का अभाव
public static class Binder
{
public static void Bind(
INotifyPropertyChanged source,
string sourcePropertyName,
INotifyPropertyChanged target,
string targetPropertyName)
{
var sourceProperty
= source.GetType().GetProperty(sourcePropertyName);
var targetProperty
= target.GetType().GetProperty(targetPropertyName);
source.PropertyChanged +=
(s, a) =>
{
var sourceValue = sourceProperty.GetValue(source, null);
var targetValue = targetProperty.GetValue(target, null);
if (!Object.Equals(sourceValue, targetValue))
{
targetProperty.SetValue(target, sourceValue, null);
}
};
target.PropertyChanged +=
(s, a) =>
{
var sourceValue = sourceProperty.GetValue(source, null);
var targetValue = targetProperty.GetValue(target, null);
if (!Object.Equals(sourceValue, targetValue))
{
sourceProperty.SetValue(source, targetValue, null);
}
};
}
}
बेशक
,:
यहाँ एक आधार मैं कुछ ही मिनटों कि दो साधारण गुणों के बीच बंधन दो तरह से डेटा स्थापित करता है में खटखटाया है। जोड़ने के लिए चीजें शामिल
- जांच की जा रही है कि
source
और target
आवंटित कर रहे हैं
- जांच की जा रही है कि गुण
sourcePropertyName
और targetPropertyName
से पहचान मौजूद
- दो गुण
इसके अलावा बीच प्रकार संगतता के लिए जाँच हो रही है, प्रतिबिंब अपेक्षाकृत धीमी है (हालांकि इसे हटाने से पहले इसे बेंचमार्क करें, यह नहीं है धीमा), तो आप संकलित का उपयोग करना चाहेंगे इसके बजाय अभिव्यक्तियां।
आखिरकार, स्ट्रिंग द्वारा गुण निर्दिष्ट करने के बाद त्रुटि प्रवण है, आप इसके बजाय लिंक अभिव्यक्तियों और एक्सटेंशन विधियों का उपयोग कर सकते हैं। तो बजाय
Binder.Bind(source, "Name", target, "Name")
लिखने की आप
source.Bind(Name => target.Name);
मैं वास्तव में पूछ रहा था क्योंकि मैं अपना खुद का लेखन करने पर विचार कर रहा था। पहिया और सभी को फिर से शुरू नहीं करना चाहता था ... धन्यवाद। –
अपडेट: मैंने प्रश्न में अपनी लाइब्रेरी से लिंक किया है। –
मुझे अपने वर्तमान प्रोजेक्ट-इन-ए-जल्दी के लिए एक साधारण बेरबोन डाटाबेसिंग क्लास की आवश्यकता थी, और उपर्युक्त एक जो मुझे चाहिए वह लगभग फिट बैठता है। मैंने दो कार्य प्रतिनिधियों द्वारा प्रतिबिंब के साथ प्रयुक्त संपत्ति नामों को प्रतिस्थापित किया जिसमें मुझे पीओसीओ से मिलता/सेट किया गया और परिवर्तन और स्वरूपण लागू किया गया। मैं निश्चित रूप से अगले प्रोजेक्ट में ट्रस की अच्छी कोशिश करूँगा, क्योंकि यह वास्तव में मेरे लिए हस्तक्षेप करता है। – Larry