我有一个绑定到字符串属性的普通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" />
答案 0 :(得分:4)
你的方法,如果它做了很多工作,可能是持有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元素。
答案 1 :(得分:0)
您需要使用TwoWay绑定而不是明确更改TextBox的值,并且需要在绑定数据类上实现 INotifyPropertyChanged 。
答案 2 :(得分:0)
尝试以下代码序列,它对我有用 -
Textblock1.Text = "ABC";
System.Windows.Forms.Application.DoEvents();
MainWindow.InvalidateVisual();
System.Threading.Thread.Sleep(40);