दिलचस्प पोस्ट
matplotlib (बराबर इकाई लंबाई): 'बराबर' पहलू अनुपात के साथ z- अक्ष x- और y- के बराबर नहीं है एक ही समय में AVCaptureVideoDataOutput और AVCaptureMovieFileOutput का उपयोग कर सकते हैं? आप एक (गैर-वेब) अजगर क्लाइंट से प्रमाणित Google App Engine सेवा तक कैसे पहुंच सकते हैं? इष्टतम तरीके से बाइनरी सर्च ट्री में सबसे छोटा तत्व ढूँढें मैं जेएसएन ऑब्जेक्ट से सभी रिक्त स्ट्रिंग मान कैसे निकालूं? इस चित्र में आयतों को कैसे पहचाना जाए? इंटरनेट एक्सप्लोरर में 'स्क्रिप्ट' टैग के लिए 'ऑनलोड' हैंडलर मैं jQuery के साथ एक div की पूर्ण सामग्री की ऊंचाई कैसे प्राप्त करूं? 30 के संशोधन के बाद "<sdk> / extras / google / google_play_services / libproject" फ़ोल्डर अनुपलब्ध है Plist में डेटा कैसे लिखने के लिए? shared_ptr संदर्भ या मूल्य से? योजना में एक सूची में तत्व की घटना की गणना करें? वर्णों की गतिशील राशि पर आधारित फ़ॉन्ट-आकार के उत्तरदायी बनाने के लिए शुद्ध सीएसएस सीएसएस में नेस्टिंग @ मीडिया नियम रचनाकारों में इसका उपयोग करते हुए प्रोटोटाइप बनाम तरीकों को परिभाषित करना – वास्तव में एक प्रदर्शन अंतर है?

टूटी हुई WPF डेटा बाइंडिंग का पता कैसे लगा सकता है?

' यूनिट टेस्टिंग डब्ल्यूपीएफ़ बाइंडिंग ' के आसपास के प्रश्न में एक प्रश्न का उत्तर देने की कोशिश करते वक्त मुझे निम्नलिखित सख्त सवाल थे …
यदि आपके पास WPF डेटा बाइंडिंग वायरिंग सेटअप गलत तरीके से है (या आप ने कुछ ऐसी चीज तोड़ दी जो सही तरीके से वायर्ड था) तो सबसे अच्छा तरीका क्या है?

यद्यपि यूनिट-परीक्षण का दृष्टिकोण जोएल की तरह लगता है 'अपनी बांह को छिलका देने के लिए एक तेज को दूर करने के लिए' .. मैं यह पता लगाने के लिए कम आसान ओवरहेड तरीके के लिए देख रहा हूं।

सभी को लगता है कि वे डब्ल्यूपीएफ के साथ बड़े पैमाने पर डेटा बाध्यकारी हैं। और इसकी योग्यताएं हैं

वेब के समाधान से एकत्रित समाधान "टूटी हुई WPF डेटा बाइंडिंग का पता कैसे लगा सकता है?"

.NET 3.5 में विशिष्ट डेटा बाइंडिंग के बारे में विशेष रूप से आउटपुट ट्रेसिंग जानकारी का एक नया तरीका पेश किया गया था।

यह नई प्रणाली के माध्यम से किया जाता है। डायग्नोस्टिक्स। प्रस्तुतिट्रेस.संसाधन। ट्रेस लेवल संलग्न संपत्ति जिसे आप किसी बाध्यकारी या डेटा प्रदाता के लिए आवेदन कर सकते हैं। यहाँ एक उदाहरण है:

<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase" Title="Debug Binding Sample" Height="300" Width="300"> <StackPanel> <TextBox Name="txtInput" /> <Label> <Label.Content> <Binding ElementName="txtInput" Path="Text" diag:PresentationTraceSources.TraceLevel="High" /> </Label.Content> </Label> </StackPanel> </Window> 

यह विज़ुअल स्टूडियो की आउटपुट विंडो में बस किसी खास ट्रेसिंग कॉन्फ़िगरेशन के लिए विशेष रूप से बाध्यकारी जानकारी का पता लगाएगा।

सर्वश्रेष्ठ मुझे मिल सकता है …

मैं WPF बाइंडिंग कैसे डीबग कर सकता हूं? बीट्रिज स्टोलनित्ज़ द्वारा

चूंकि हर कोई बाध्यकारी त्रुटियों की तलाश में आउटपुट विंडो पर हमेशा एक नजर नहीं रख सकता है, इसलिए मुझे विकल्प # 2 पसंद आया जो आपके ऐप में शामिल है। कॉन्फ़िफ

 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <source name="System.Windows.Data" switchName="SourceSwitch" > <listeners> <add name="textListener" /> </listeners> </source> </sources> <switches> <add name="SourceSwitch" value="All" /> </switches> <sharedListeners> <add name="textListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="GraveOfBindErrors.txt" /> </sharedListeners> <trace autoflush="true" indentsize="4"></trace> </system.diagnostics> </configuration> 

प्रासंगिक जानकारी को निकालने के लिए एक अच्छा रेगेक्स स्कैन स्क्रिप्ट के साथ जोड़ी करें, कि आप कभी-कभी अपने आउटपुट फ़ोल्डर में GraveOfBindErrors.txt पर चला सकते हैं।

 System.Windows.Data Error: 35 : BindingExpression path error: 'MyProperty' property not found on 'object' ''MyWindow' (Name='')'. BindingExpression:Path=MyProperty; DataItem='MyWindow' (Name=''); target element is 'TextBox' (Name='txtValue2'); target property is 'Text' (type 'String') 

आप WPF निरीक्षक की ट्रिगर डिबगिंग सुविधा का उपयोग कर सकते हैं। बस कोडप्लेक्स से टूल डाउनलोड करें और इसे अपने चल रहे ऐप पर जोड़ें। यह विंडो के नीचे बाध्यकारी त्रुटियों को भी दिखाता है। बहुत उपयोगी उपकरण!

यहां छवि विवरण दर्ज करें

मैं मूल अपवादों में बाध्यकारी त्रुटियों को बदलने के लिए यहां प्रस्तुत समाधान का उपयोग करता हूं: http://www.jasonbock.net/jb/Default.aspx?blog=entry.0f221e047de740ee90722b248933a28d

हालांकि, WPF बाइंडिंग में एक सामान्य परिदृश्य में उपयोगकर्ता इनपुट को लक्ष्य प्रकार में परिवर्तित नहीं किया जा सकता है (उदाहरण के लिए, एक पूर्णांक फ़ील्ड के लिए बाध्य एक टेक्स्टबॉक्स); प्रारूप एक्सपेशन में नॉन-न्यूमेरिक स्ट्रिंग परिणाम का इनपुट, संख्या का इनपुट जो ओवरफ़्लो अपवाद में बहुत बड़ा परिणाम है) ऐसा ही एक मामला है जब स्रोत संपत्ति के सेटर एक अपवाद फेंकता है

यह निपटाने का WPF तरीका मान्य के माध्यम से है एक्सपरेशन = सच और मान्यकरण ExceptionRule उपयोगकर्ता संकेत करने के लिए आपूर्ति इनपुट सही नहीं है (अपवाद संदेश का उपयोग कर)।

हालांकि, इन अपवाद को आउटपुट विंडो में भी भेज दिया जाता है और इस तरह बाध्यकारी लिस्टनर द्वारा 'पकड़ा' जाता है, जिसके परिणामस्वरूप एक त्रुटि उत्पन्न होती है … स्पष्ट रूप से व्यवहार नहीं करना चाहिए

इसलिए, मैंने इन मामलों में एक अपवाद फेंकने के लिए BindingListener वर्ग का विस्तार किया है:

 private static readonly IList<string> m_MessagesToIgnore = new List<String>() { //Windows.Data.Error 7 //Binding transfer from target to source failed because of an exception //Normal WPF Scenario, requires ValidatesOnExceptions / ExceptionValidationRule //To cope with these kind of errors "ConvertBack cannot convert value", //Windows.Data.Error 8 //Binding transfer from target to source failed because of an exception //Normal WPF Scenario, requires ValidatesOnExceptions / ExceptionValidationRule //To cope with these kind of errors "Cannot save value from target back to source" }; 

सार्वजनिक ओवरराइड शून्य में संशोधित लाइनें WriteLine (स्ट्रिंग संदेश) :

  .... if (this.InformationPropertyCount == 0) { //Only treat message as an exception if it is not to be ignored if (!m_MessagesToIgnore.Any( x => this.Message.StartsWith(x, StringComparison.InvariantCultureIgnoreCase))) { PresentationTraceSources.DataBindingSource.Listeners.Remove(this); throw new BindingException(this.Message, new BindingExceptionInformation(this.Callstack, System.DateTime.Parse(this.DateTime), this.LogicalOperationStack, int.Parse(this.ProcessId), int.Parse(this.ThreadId), long.Parse(this.Timestamp))); } else { //Ignore message, reset values this.IsFirstWrite = true; this.DetermineInformationPropertyCount(); } } } 

डीबगिंग / ट्रेसिंग के प्रभावी ढंग से ट्रिगर करने के लिए यहां एक उपयोगी तकनीक है यह तत्व के साथ साथ सभी ट्रिगर कार्यों को लॉग करने की अनुमति देता है:

http://www.wpfmentor.com/2009/01/how-to-debug-triggers-using-trigger.html

यह हमारे लिए बहुत ही उपयोगी था, लेकिन मैं उन लोगों को जोड़ना चाहता था जो इस उपयोगी को खोजते हैं कि माइेटेड इस फाइल को पढ़ने के लिए एसडीके के साथ एक उपयोगिता प्रदान करता है।

यहां मिले: http://msdn.microsoft.com/en-us/library/ms732023.aspx

ट्रेस फ़ाइल खोलने के लिए

1. अपने WCF स्थापना स्थान (सी: \ प्रोग्राम फ़ाइलें \ Microsoft SDKs \ Windows \ v6.0 \ Bin) पर नेविगेट करने के लिए एक आदेश विंडो का उपयोग करके सेवा ट्रेस व्यूअर स्टार्ट करें, और उसके बाद टाइप करें SvcTraceViewer.exe। (हालांकि हमें हमारे \ v7.0 \ बिन में मिला)

नोट: सर्विस ट्रैस व्यूअर टूल दो फाइल प्रकारों के साथ संबद्ध कर सकता है: .svclog और .stvproj आप फ़ाइल एक्सटेंशन के पंजीकरण और अपंजीकृत करने के लिए कमांड लाइन में दो मापदंडों का उपयोग कर सकते हैं।

/ पंजीकरण करें: फ़ाइल एक्सटेंशन एसोसिएशन के साथ रजिस्टर करें ".svclog" और ".stvproj" SvcTraceViewer.exe के साथ

/ अपंजीकृत करें: फ़ाइल एक्सटेंशन ".svclog" और ".stvproj" के एसवीसीट्रेस वीवर के साथ संघ पंजीकरण रद्द करें। exe

1. जब सेवा ट्रेस व्यूअर शुरू होता है, तो फ़ाइल पर क्लिक करें और फिर खोलें पर क्लिक करें। उस स्थान पर नेविगेट करें जहां आपके ट्रेस फ़ाइलें संग्रहीत हैं

2. उस फ़ाइल को दो-क्लिक करें जिसे आप खोलना चाहते हैं।

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

3. संग्रह के अतिरिक्त ट्रेस फ़ाइलों को जोड़ने के लिए जो खुला है, फ़ाइल पर क्लिक करें और फिर जोड़ें को इंगित करें। खुलने वाली विंडो में, ट्रेस फ़ाइलों के स्थान पर नेविगेट करें और उस फ़ाइल को डबल-क्लिक करें जिसे आप जोड़ना चाहते हैं।

साथ ही, लॉग फ़ाइल के फ़िल्टरिंग के लिए, हमने यह लिंक बहुत उपयोगी पाया:

http://msdn.microsoft.com/en-us/library/ms751526.aspx

मेरे जैसे किसी भी व्यक्ति को किसी विशिष्ट ट्रेस स्तर पर सभी WPF ट्रेसिंग को सक्षम करने का एक शुद्ध कार्यक्रम की तलाश है, यहां यह एक ऐसा कोड है जो यह करता है संदर्भ के लिए, यह इस लेख पर आधारित है: WPF में ट्रेस स्रोत

यह app.config फ़ाइल में एक बदलाव की आवश्यकता नहीं है, और इसके लिए रजिस्ट्री को बदलने की आवश्यकता नहीं है।

कुछ स्टार्टअप प्लेस (ऐप, इत्यादि) में मैं इसका उपयोग कैसे करता हूं:

 .... #if DEBUG WpfUtilities.SetTracing(); #endif .... 

और यहां उपयोगिता कोड है (डिफ़ॉल्ट रूप से यह सभी चेतावनी को डिफ़ॉल्ट ट्रेस श्रोता को भेजता है):

 public static void SetTracing() { SetTracing(SourceLevels.Warning, null); } public static void SetTracing(SourceLevels levels, TraceListener listener) { if (listener == null) { listener = new DefaultTraceListener(); } // enable WPF tracing PresentationTraceSources.Refresh(); // enable all WPF Trace sources (change this if you only want DataBindingSource) foreach (PropertyInfo pi in typeof(PresentationTraceSources).GetProperties(BindingFlags.Static | BindingFlags.Public)) { if (typeof(TraceSource).IsAssignableFrom(pi.PropertyType)) { TraceSource ts = (TraceSource)pi.GetValue(null, null); ts.Listeners.Add(listener); ts.Switch.Level = levels; } } }