У меня есть заставка, которая должна показывать процесс загрузки при запуске программы. Не удается получить текст в метке для обновления при загрузке компонентов.
Из основного запуска program.cs Я вызываю метод run () в контроллере заставки.
startUpSplash.Run();
Вот контроллер. Это показывает заставку с надписью «Initializing ...»
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 также в контроллере заставки. Это предназначено для обновления метки, чтобы показать все происходящее.
Это Xaml для lbl, который должен обновляться.
<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);
}
}
}