我有一个启动画面,应该在程序启动时显示加载过程。加载组件时,我无法更新标签中的文本。
从主启动 program.cs 我调用启动画面控制器中的 run() 方法。
startUpSplash.Run();
这里是控制器。这显示带有标签“正在初始化...”的启动画面
public class StartUpSplashController
{
public StartUpSplashViewModel ViewModel { get; set; }
private StartUpSplashView starUpSplashWindow = new StartUpSplashView();
private delegate void UIDelegate();
public void Run()
{
InitializeViewModel();
ViewModel.StatusMessage = "Initializing...";
starUpSplashWindow.DataContext = ViewModel;
starUpSplashWindow.Show();
}
public void UpdateStatus(string statusMessage)
{
starUpSplashWindow.Dispatcher.Invoke(new UIDelegate(delegate { ViewModel.StatusMessage = statusMessage; }));
//ViewModel.StatusMessage = statusMessage;
}
public void End()
{
starUpSplashWindow.Close();
starUpSplashWindow.InvalidateVisual();
}
private void InitializeViewModel()
{
ViewModel = new StartUpSplashViewModel(starUpSplashWindow);
ViewModel.Controller = this;
}
}
然后从主program.cs,因为发生了不同的事情,我也在启动控制器中调用了这个UpdateStatus方法。这是为了更新标签以显示正在发生的所有不同的事情。
这是应该更新的 lbl 的 Xaml。
<Label Content="{Binding Path=StatusMessage, Mode=TwoWay, UpdateSourceTrigger= PropertyChanged}" />
调用 UpdateStatus 方法时标签未更新。我注意到的一件奇怪的事情是,如果我做了
startupSplash.UpdateStatus("something");
进而
Messagebox.show("something");
消息框弹出后,初始屏幕显示更新的标签。
对此的任何帮助将不胜感激。
更新 2:这是视图模型
public class StartUpSplashViewModel : ViewModel<IView>
{
[ImportingConstructor]
public StartUpSplashViewModel(StartUpSplashView view)
: base(view)
{
}
public StartUpSplashController Controller { get; set; }
private string _statusMessage;
public string StatusMessage
{
get
{
return _statusMessage;
}
set
{
if (_statusMessage == value)
return;
_statusMessage = value;
this.RaisePropertyChanged(s => s.StatusMessage);
}
}
}