如何在C#/WPF中刷新窗口
本文关键字:刷新 窗口 WPF | 更新日期: 2023-09-27 18:30:10
我想根据事件更改一个值(textBlock)。然后,我想刷新我的窗口,但我做不到。我使用了invalidateVisual以及其他帖子的解决方案,但没有任何效果。
提前感谢
几个解决方案(第一个和第二个不使用数据绑定)。
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(),则会根据需要刷新显示。
还有其他方法,但考虑到我对你的问题的理解,这是最简单的。
(这与另一个答案类似,但我试着用单词拼写,这样更容易理解/实现。)