2009-05-04 17 views
12

हम इस तरह दो textBlocks है: (हम नेट परिवार कल्याण 3.0 इस्तेमाल किया)रीफ्रेश करने के लिए एक WPF नियंत्रण को मजबूर करें?

<TextBlock Grid.Column="0" Name="tabName" Style="{StaticResource textBlockBarStyle}" HorizontalAlignment="Left"> 
    <TextBlock.Margin> 
     <Binding Converter="{StaticResource dpiConverter}"> 
      <Binding.ConverterParameter> 
       <Thickness Left="3" Top="6" Right="0" Bottom="0"/> 
      </Binding.ConverterParameter> 
     </Binding> 
    </TextBlock.Margin> 
</TextBlock> 

और

<TextBox x:Name="txtBoxHelp" 
      IsReadOnly="True" Style="{DynamicResource txtBoxHelpStyle}" 
      IsTabStop="False" 
      Text="some text" MouseLeftButtonDown="txtBoxHelp_MouseLeftButtonDown"> 
    <TextBox.Margin> 
     <Binding Converter="{StaticResource dpiConverter}"> 
      <Binding.ConverterParameter> 
       <Thickness Left="7" Top="0" Right="0" Bottom="0"/> 
      </Binding.ConverterParameter> 
     </Binding> 
    </TextBox.Margin> 
</TextBox> 

इन दो textBlocks अन्य ओएस-एस पर अच्छी तरह से काम, लेकिन कभी कभी Windows XP पर याद आती है एसपी 3 के साथ होम संस्करण। हमने इन्हें रीफ्रेश करने के कई तरीकों का प्रयास किया है, लेकिन असफल रहा।

हमने कोशिश की:

  1. UpdateLayout
  2. InvalidateVisual
  3. बदल दिया बाध्यकारी मोड के लिए कोड में सेट पाठ संपत्ति।

इन नियंत्रणों को ताज़ा करने के लिए कैसे मजबूर करें?

+1

(UIElement के रूप में एक्स) .InvalidateMeasure() – 0x4f3759df

उत्तर

4

Thread thread = new Thread(new ThreadStart(delegate() 
       { 
        Thread.Sleep(200); // this is important ... 
        try 
        { 
         this.Dispatcher.BeginInvoke(DispatcherPriority.Send, 
          new NoArgsHandle(delegate() 
          { 
           // do something, set .Text = "some text" 
          })); 
        } 
        catch { } 
       })); 
       thread.Name = "thread-UpdateText"; 
       thread.Start(); 

यह अच्छी तरह से काम करता है।

+0

क्या 'NoArgsHandle' मुझे इसके लिए कक्षा बनाने की आवश्यकता है? – raym0nd

4

डब्ल्यूपीएफ में नियंत्रण लाइव अपडेट करने का तरीका टूवे डाटाबेसिंग है। तो सुनिश्चित करें कि आपके द्वारा बाध्य किए गए सभी दृश्य मॉडल गुण निर्भरता गुण हैं या इनोटिफ़ाईप्रॉपर्टी को लागू करें (और सही ढंग से संभाला गया है) और यह भी कि उनके बाध्यकारी। मोड = दोवे।

चेक बाहर Rudi Grobler के 10 बातें मैं के बारे में WPF डेटा बाइंडिंग

कुछ डेटा बाइंडिंग लेख में पता नहीं था:

  1. WPF Data Binding - Part 1 योएल आइवरी जॉनसन द्वारा alt text
  2. Moving Toward WPF Data Binding One Step at a Time जोश स्मिथ
  3. तक
+0

मुझे नहीं लगता कि इस समस्या को हल कर सकता है, क्योंकि हम एक तरह से बंधन की कोशिश की है है। –

16

यह हमारे लिए एक नया धागा बनाने की आवश्यकता के बिना काम करता है। यह शुरू करने के लिए कार्रवाई को शेड्यूल करता है जब सभी बाइंडिंग ने स्वयं को पहले अपडेट किया है।

  Application.Current.Dispatcher.BeginInvoke(
       DispatcherPriority.Background, 
       new Action(() => 
        { 
         // Do something here. 
        })); 
संबंधित मुद्दे