我知道這是一個經常被問到的問題,但我試圖至少在一週內解決它......閱讀了太多的線程,下載了數百萬個不同的MVVM-Pattern-Examples等。 。MVVM更新標籤
我只是想更新我的MVVM模型視圖第一種方法愚蠢的標籤:
void StartUpProcess_DoWork(object sender, DoWorkEventArgs e)
{
SplashWindow splash = new SplashWindow();
var ViewModel_Splash = new VM_SplashWindow();
splash.DataContext = ViewModel_Splash;
splash.Topmost = true;
splash.Show();
ViewModel_Splash.DoWork();
}
完整的視圖模型:
public class VM_SplashWindow:VM_Base
{
#region Properties
private string _TextMessage;
public string TextMessage
{
get
{
return _TextMessage;
}
set
{
if(_TextMessage != value)
{
_TextMessage = value;
base.OnPropertyChanged("TextMessage");
}
}
}
#endregion
#region Methods
public void DoWork()
{
this.TextMessage = "Initialize";
for(int aa = 0; aa < 1000; aa++)
{
this.TextMessage = "Load Modul: " + aa.ToString();
Thread.Sleep(5);
}
this.TextMessage = "Done";
Thread.Sleep(1000);
}
#endregion
}
從基地一小片:
public abstract class VM_Base:INotifyPropertyChanged, IDisposable
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
#endregion
}
最後認爲:
<Label Height="28" Margin="19,0,17,15" Name="label2" VerticalAlignment="Bottom"
Content="{Binding Path=TextMessage}" Foreground="White" />
如果我在視圖模型的構造函數中設置的TextMessage的一個屬性的初始值,這個初始值將在splash.Show()命令後顯示。
在DoWork-Method中設置TextMessage屬性會引發onPropertyChangedEvent,但不幸的是它不會更新窗口中的標籤。我不知道該怎麼辦......我非常期待尋求幫助。提前謝謝了!
也許我應該提到的是,StartUpProcess_DoWork是在自己的STAThread
親切的問候運行,FLO
到目前爲止,沒有其他的工作或任務。計劃使用splashwindow來觀察加載和軟件更新 - 進度。所以我要添加有用的代碼而不是thread.sleep函數。沒有Thread.sleep,我在屏幕上看不到任何消息。 – Florian 2012-08-12 22:08:26