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

时间:2014-11-11 18:15:34

标签: c# wpf window refresh textblock

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

提前谢谢

3 个答案:

答案 0 :(得分:3)

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

 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。

答案 1 :(得分:0)

您尝试做的最佳方法是使用数据绑定。

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

更多信息here

答案 2 :(得分:0)

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

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

(这与其他答案类似,但我试图说出来,因此更容易理解/实施。)