2014-01-17 31 views
1

我有一些頁面TextBoxPhoneTextBox(來自工具包):xaml代碼的一部分。 我動畫scrollviewer(不透明度和XProperty),befor我設置文本框的datacotext。Windows Phone 8在TextBox或PhoneTextBox中輸入緩慢的文本

<ScrollViewer x:Name="ContentScroller" 
         Visibility="Collapsed" 
         Margin="35,0,35,0"> 
      <ScrollViewer.RenderTransform> 
       <TranslateTransform /> 
      </ScrollViewer.RenderTransform> 
      <Grid x:Name="ContentGrid"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <TextBlock x:Name="CreationgDate" 
          Text="{Binding CreationDate, StringFormat='Created: {0:dd.MM.yyyy HH:mm}'}" 
          Style="{StaticResource CreationDateTextStyle}" 
          Grid.Row="0"/> 
       <toolkit:PhoneTextBox x:Name="BodyData" 
             InputScope="Chat" 
             Text="{Binding Body, UpdateSourceTrigger=Explicit}"        
             LostFocus="BodyData_LostFocus" 
             TextWrapping="Wrap" 
             AcceptsReturn="True" 
             Grid.Row="1">       
       </toolkit:PhoneTextBox> 
      </Grid> 
     </ScrollViewer> 

我在事件LostFocus更新數據源:

// this I set datacontex 
    private async void Item_Click(object sender, RoutedEventArgs e) 
    { 
     PageHeader.DataContext = CreationgDate.DataContext = BodyData.DataContext = activeItem;    
     await AnimateChangePage(); 
    } 

    private void BodyData_LostFocus(object sender, RoutedEventArgs e) 
    { 
     BindingExpression be = NoteBodyData.GetBindingExpression(PhoneTextBox.TextProperty); 
     be.UpdateSource(); 
    } 

故障:在文本框中的文本有400-500個字符多,然後在文本框非常緩慢的文字輸入和鍵盤有一個滯後反應。 我測試應用程序在真實設備(不是模擬器),其他應用程序具有相同的功能(從應用程序商店)工作正常,沒有滯後和緩慢的輸入。

請幫我解決這個問題。 對不起我的郎(不是英文:) :)。

+0

我還沒有使用過這麼長的文本框,但是作爲一個測試,如果你將綁定從Explicit改變爲LostFocus並且擺脫了lostFocus事件呢? msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger(v=vs.110).aspx – HockeyJ

+0

我的第一個變種:'Text =「{Binding Body,Mode = TwoWay}」',默認UpdateSourceTrigger,但結果相同。 – f14shm4n

+0

很難說。通常,這種減速是由於對象更新後在後臺發生大量通知而引起的。您的模型是從BindableBase繼承的,還是您使用的是MVVM框架? – HockeyJ

回答

1

根據我們的討論意見,這是最好的答案我可以給:

  1. 調試模式運行在手機上的應用程序。

  2. 要麼馬上出現問題,要麼在body屬性的set語句中設置一個斷點(上面if property = value)。當命中斷點時,使用調用堆棧來計算導致更新和觀察窗口的內容,以查看當前值。您可能會發現某些內容正在嘗試重複更新。

  3. 如果還有其他內容正在更新身體,則會發布訂閱事件或視圖模型事件,這些事件與身體相關,在他們身上貼上斷點並查看它們是否過度射擊。

  4. 失敗了,堅持斷點無處不在。例如,它可能因某種原因而失去焦點,並且觸發該事件超過其應有的程度。它也可能是在後臺渲染的其他東西。

  5. 所有的失敗,嘗試不綁定文本框,並設置值的WinForms風格,然後再拿回來。刪除所有不必要的事件然後,您可以重新建立並找出原因。如果沒有約束力和附加事件,它會變得緩慢,那麼我真的會不知所措。

一般來說,我發現這種事情與事件發生有關,我沒有想到。我看到你正在檢查傳入的值是不同的,這將阻止可怕的MVVM屬性循環,但是沒有看到應用程序的其餘部分,很難將問題進一步縮小。

相關問題