簡體   English   中英

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

[英]How to refresh a window in C#/WPF?

我想根據事件更改值(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(),則將導致顯示刷新。

還有其他方法,但是鑒於我對您的問題的理解,這是最簡單的方法。

(這與其他答案類似,但是我嘗試措辭,以便於理解/實施。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM