我有一些带有TextBox或PhoneTextBox的页面(来自工具箱):xaml代码的一部分。我为scrollviewer(不透明度和XProperty)设置动画,因为我为文本框设置了datacotext。
<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个字符或更多时,则文本框中的文本输入会非常缓慢,并且键盘会有滞后响应。我在真实设备(不是模拟器)中测试应用程序,其他具有相同功能的应用程序(来自应用程序商店)可以正常运行,而不会出现滞后和缓慢输入的情况。
请帮我做这件事。很抱歉我的lang(不是英语):)。
经过我们的评论讨论,这是我能给出的最佳答案:
在手机上以调试模式运行该应用程序。
立即或者在发生问题时,在body属性的set语句中设置一个断点(如果property = value上方)。当达到断点时,使用调用堆栈找出导致更新的原因,并通过监视窗口查看当前值。您可能会发现某些内容正在尝试对其进行反复更新。
如果有任何其他更新主体的事件,则有与主体相关的已订阅事件或被触发的viewmodel事件,请在它们上贴上断点,并查看它们是否触发过多。
失败的话,到处都存在断点。例如,由于某种原因,它可能会失去焦点,并且触发该事件的次数超过了应有的程度。也可能是其他在后台运行的东西。
所有失败的方法,请尝试不绑定文本框,并使用WinForms样式设置该值,然后稍后再将其取回。删除所有不必要的事件。然后,您可以备份它并确定原因。如果没有绑定和附加事件的速度很慢,那么我真的会失去主意。
通常,我发现这种事情与我未曾想到的事件触发有关。我看到您正在检查传入的值是否不同,这将停止可怕的MVVM属性循环,但是如果看不到应用程序的其余部分,则很难进一步缩小问题的范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句