![](/img/trans.png)
[英]How to force the refresh of the thumbnail when the window is minimized ? (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.