4

我有一个绑定到字符串属性的普通 wpf TextBox 控件。我需要在绑定或 .Text 属性更新后立即更新显示的文本。我试过了

((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateTarget();

在 TextChanged 事件处理程序中。

我试过UpdateSourceTrigger=Explicit绑定。我试过了

Application.Current.Dispatcher.BeginInvoke(
    DispatcherPriority.Input,
     new Action(() =>
     {
         statusTextBox.Text = "newValue";
     }));

以及这些的许多不同组合。但是只有当我从退出更新文本框的方法时,显示的文本才会改变。

XAML:

<TextBox x:Name="txBox" Height="150" Margin="0,0,0,0" VerticalAlignment="Top" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" AcceptsReturn="True"  VerticalContentAlignment="Top" Text="{Binding TextProperty}"Width="200" />
4

3 回答 3

6

你的方法如果它做了很多工作,可能是保持 UI 线程()的执行顺序)。无论您在该方法中做什么 - 在后台线程中执行。

private void SomeMethod()
{
   Task.Factory.StartNew(() =>
        {
                       /// do all your logic here

                       //Update Text on the UI thread 
                       Application.Current.Dispatcher.BeginInvoke( DispatcherPriority.Input,
                      new Action(() => { statusTextBox.Text = "newValue";}));

                       //continue with the rest of the logic that take a long time
                    });

只要确保如果在该方法中您正在触摸任何 UI 元素,则在 UI 线程上执行此操作,否则您将遇到崩溃。让 UI 线程知道的另一种可能更好的方法是 RaisePropertyChanged 您希望绑定知道,而不是直接操作 UI 元素。

于 2013-08-26T14:47:54.077 回答
0

您需要使用 TwoWay 绑定而不是显式更改 TextBox 的值,并且您需要在绑定数据的类上实现INotifyPropertyChanged 。

于 2013-08-26T15:06:42.067 回答
0

尝试以下代码序列,它对我有用-

Textblock1.Text = "ABC";
System.Windows.Forms.Application.DoEvents();
MainWindow.InvalidateVisual();
System.Threading.Thread.Sleep(40);
于 2016-08-02T06:36:12.900 回答