如何在C#/WPF中刷新窗口

本文关键字:刷新 窗口 WPF | 更新日期: 2023-09-27 18:30:10

我想根据事件更改一个值(textBlock)。然后,我想刷新我的窗口,但我做不到。我使用了invalidateVisual以及其他帖子的解决方案,但没有任何效果。

提前感谢

如何在C#/WPF中刷新窗口

几个解决方案(第一个和第二个不使用数据绑定)。

 txtMyControl.text = "New value";

如果不在主线程上,则可以使用调度器来更新值。

Application.Current.Dispatcher.BeginInvoke(() => txtMyControl.text == "New Value")

然而,最适合WPF的方法是使用数据绑定。对代码中的值所做的任何更改都将立即反映在UI中。

XAML

<TextBox x:Name="txtExample"  Text="{Binding MyTextProperty,Mode=TwoWay}" Height="24" Width="120"/>

在代码中,您必须声明一个持久的变量。

private ExampleModel _ExampleModel = new ExmampleModel();

加载代码时,将该变量与文本框数据上下文相关联。

txtExample.DataContext = _ExampleModel 

然后,您就有了一个类,它将包含屏幕上的所有可编辑属性(文本框、单选框等)

public class ExampleModel : INotifyPropertyChanged
{
private string _MyTextProperty = "test";
public string MyTextProperty {
    get { return _MyTextProperty; }
    set {
        if (string.Compare(_MyTextProperty, value) != 0) {
            _MyTextProperty = value;
            RaisePropertyChanged("MyTextProperty");
        }
    }
}
public void RaisePropertyChanged(string PropertyName)
{
    if (PropertyChanged != null) {
        PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
    }
}
public event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged;
public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);
}

每当处理事件时,只需更改包含信息的属性的值,UI就会相应地刷新。此外,由于我们使用双向绑定,文本框中的值将始终与ExampleModel类中MyTextProperty属性所包含的值相同,这使得值检索非常容易
例如:

_ExampleModel.MyTextProperty = "New value";

如果您已经在使用数据绑定,请确保使用的类实现INotifyPropertyChanged,并且在属性值更改时调用propertyChanged事件,否则它不会更新UI。

您尝试执行的操作的最佳方法是使用数据绑定。

您需要有一个字符串对象,它将始终保存您的文本块的值。接下来,您需要将该对象绑定到文本块,然后使用INotifyPropertyChanged接口提供的事件,每次值更改时,其表示形式(文本块)都将更改为,无需刷新窗口。

更多信息请点击此处

如果您的事件更新了文本块,并且您正在使用的文本块绑定到一个字符串属性,并且该属性在其set方法中发出NotifyPropertyChanged(),则会根据需要刷新显示。

还有其他方法,但考虑到我对你的问题的理解,这是最简单的。

(这与另一个答案类似,但我试着用单词拼写,这样更容易理解/实现。)