सिल्वरलाइट में बाध्यकारी स्रोत स्रोत या निर्भरता वस्तु की आवश्यकता होती है। उस स्रोत ऑब्जेक्ट से आप गुणों से जुड़ सकते हैं (इसलिए परिभाषा के अनुसार आप उदाहरण सदस्यों के लिए बाध्यकारी हैं) या निर्भरता गुण।
DateTime.Now
एक स्थिर संपत्ति है जिसे आप सिल्वरलाइट में सीधे बांध नहीं सकते हैं, इसलिए कुछ कोड की आवश्यकता है। अगले सबसे अच्छी बात करने के लिए कोड का उपयोग करने के लिए है: -
- आपको क्या चाहिए संभव के रूप में एक के रूप में डी-युग्मित ढंग से ऐसा करने के लिए XAML
- में व्यक्त किया जा सकता के रूप में ज्यादा करता है।
इसलिए हम विश्लेषण कर सकते हैं कि हमें दो चीजों की आवश्यकता है।
- किसी वस्तु
- के कहने गुण के रूप में दिनांक समय के स्थिर सदस्यों का पर्दाफाश किसी तरह एक वांछनीय उत्पादन के लिए दिनांक समय फ़ॉर्मेट करने के लिए है।
पहले आइटम को संभालने के लिए मैं एक StaticSurrogate
वर्ग बनाने जहां मैं स्थिर गुणों है कि हम करने के लिए उपयोग की जरूरत के लिए उदाहरण के गुण पैदा होगा: -
public class StaticSurrogate
{
public DateTime Today { get { return DateTime.Today; } }
public DateTime Now { get { return DateTime.Now; } }
}
अब हम एक तरह से जरूरत है एक फ़ॉर्मेट करने के लिए दिनांक समय। एक मूल्य कनवर्टर, इस काम के लिए सही उपकरण है से इस Tim Heuer Blog भारी उधार: - जगह में
public class FormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter != null)
{
string formatterString = parameter.ToString();
if (!String.IsNullOrEmpty(formatterString))
{
return String.Format(culture, String.Format("{{0:{0}}}", formatterString), value);
}
}
return (value ?? "").ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
इन दो वर्गों के साथ अब हम Xaml में आराम कर सकते हैं, पहले हम अपने संसाधनों में इन कक्षाओं के उदाहरण की जरूरत है : -
<UserControl.Resources>
<local:StaticSurrogate x:Key="Static" />
<local:FormatConverter x:Key="Formatter" />
</UserControl.Resources>
अब हम ऊपर तार कर सकते हैं TextBlock
: -
<TextBlock Text="{Binding Today, Source={StaticResource Static},
Converter={StaticResource Formatter}, ConverterParameter='dd MMM yyy'}" />
नोट इस दृष्टिकोण निम्न लाभ हैं कि: -
- हमें UserControl पर कोड जोड़ने की आवश्यकता नहीं है जिस पर टेक्स्टब्लॉक रखा गया है, और न ही हमें किसी भी डेटा संदर्भ के साथ परेशान होना है।
- स्थिर संसाधनों को ऐप में रखा जा सकता है। स्रोत जो टेक्स्टब्लॉक का निर्माण पूरी तरह से UserControl में कुछ और जोड़ने के लिए स्वतंत्र करेंगे।
- दिनांक प्रदर्शित करने के लिए प्रयुक्त प्रारूपण को स्वतंत्र रूप से संशोधित किया जा सकता है।
- अतिरिक्त स्थिर गुणों तक पहुंच आसानी से
StaticSurrogate
कक्षा में जोड़ा जा सकता है।
मेरे लिए समझ में आता है लेकिन यह फ्लेक्स वाक्य रचना की तुलना में चरम प्रतीत होता है कि: पाठ = "{नई तिथि()}"। मुझे लगता है कि यह सब इस तथ्य से उबाल जाता है कि सिल्वरलाइट केवल एक्सएएमएल के अंदर कुछ मार्कअप एक्सटेंशन का समर्थन करता है। यह अच्छा होगा अगर उन्होंने घुंघराले ब्रेस मूल्यांकन को और अधिक मजबूत बना दिया। आपकी सहायताके लिए धन्यवाद! –