2009-05-18 24 views
7

मैं किसी ऑब्जेक्ट की नेस्टेड प्रॉपर्टी का मूल्य प्राप्त करना चाहता हूं (Person.FullName.FirstName की तरह कुछ)। मैंने देखा कि नेट में प्रॉपर्टीपाथ नामक एक वर्ग है, जो डब्ल्यूपीएफ बाध्यकारी में इसी तरह के उद्देश्य के लिए उपयोग करता है। क्या WPF के तंत्र का पुन: उपयोग करने का कोई तरीका है, या मुझे अपने आप को एक लिखना चाहिए।क्या संपत्तिपाथ वर्ग का उपयोग कर ऑब्जेक्ट का संपत्ति मूल्य प्राप्त करने का कोई तरीका है?

उत्तर

12

PropertyPath पुनर्प्रयोग आकर्षक रूप में यह नेस्ट गुण traversing के रूप में आप का कहना है और अनुक्रमित समर्थन करता है। आप स्वयं को समान कार्यक्षमता लिख ​​सकते हैं, मेरे पास अतीत में है लेकिन इसमें अर्द्ध जटिल पाठ पार्सिंग और प्रतिबिंबित कार्य शामिल हैं।

जैसा कि एंड्रयू बताता है कि आप बस WPP से PropertyPath का पुन: उपयोग कर सकते हैं। मुझे लगता है कि आप उस ऑब्जेक्ट के खिलाफ उस पथ का मूल्यांकन करना चाहते हैं जो आपके पास है, जिस स्थिति में कोड थोड़ा सा शामिल है। प्रॉपर्टीपैथ का मूल्यांकन करने के लिए इसे एक निर्भरता ऑब्जेक्ट के खिलाफ बाध्यकारी में उपयोग किया जाना चाहिए। इसे प्रदर्शित करने के लिए मैंने अभी एक साधारण निर्भरता ऑब्जेक्ट बनाया है जिसे बाध्यकारी एवल्यूलेटर कहा जाता है जिसमें एक एकल निर्भरता प्रजनन होता है। असली जादू तब बाध्यकारीऑपरेशंस को कॉल करके होता है। नेट बाइंडिंग जो बाइंडिंग लागू करती है ताकि हम मूल्यांकन मूल्य पढ़ सकें।

var path = new PropertyPath("FullName.FirstName"); 

var binding = new Binding(); 
binding.Source = new Person { FullName = new FullName { FirstName = "David"}}; // Just an example object similar to your question 
binding.Path = path; 
binding.Mode = BindingMode.TwoWay; 

var evaluator = new BindingEvaluator(); 
BindingOperations.SetBinding(evaluator, BindingEvaluator.TargetProperty, binding); 
var value = evaluator.Target; 
// value will now be set to "David" 


public class BindingEvaluator : DependencyObject 
{ 
    public static readonly DependencyProperty TargetProperty = 
     DependencyProperty.Register(
      "Target", 
      typeof (object), 
      typeof (BindingEvaluator)); 

    public object Target 
    { 
     get { return GetValue(TargetProperty); } 
     set { SetValue(TargetProperty, value); } 
    } 
} 

यदि आप इसे विस्तारित करना चाहते हैं तो आप संपत्ति परिवर्तनित घटनाओं को बदलने वाले मूल्यों को पढ़ने के लिए तारों को समर्थन दे सकते हैं। आशा है कि ये आपकी मदद करेगा!

+1

आप उस संपत्ति को वापस कैसे लिखेंगे? –

+0

मैंने लक्ष्य को अद्यतन करने के लिए कोड नमूना अपडेट किया है। आपको बस यह सुनिश्चित करना होगा कि बाध्यकारी दोवे है और एक सेटटर प्रदान करें। –

0

मुझे कोई कारण नहीं दिख रहा है कि आप इसका पुन: उपयोग क्यों नहीं कर पाएंगे।

PropertyPath देखें:

एक और संपत्ति नीचे एक रास्ता के रूप में एक संपत्ति का वर्णन के लिए एक डेटा संरचना औजार, या एक मालिक प्रकार नीचे। संपत्ति पथ का उपयोग ऑब्जेक्ट्स के लिए बाध्यकारी, और स्टोरीबोर्ड और एनिमेशन के लिए समयरेखा में किया जाता है।

संबंधित मुद्दे

 संबंधित मुद्दे