プログラムの起動時に読み込みプロセスを表示するはずのスプラッシュ画面があります。コンポーネントが読み込まれると、ラベル内のテキストを更新することができません。Wpf Xamlビューが更新されない
メインの起動プログラムprograms.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");
をした場合のメッセージボックスがポップアップした後にスプラッシュ画面が更新されたラベルを示すことでした。
これで任意の助けいただければ幸いです。
UPDATE 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);
}
}
}
ViewModelにINotifyPropertyChangedインターフェイスを実装しましたか? – VS1
ありがとうHenk、@ Vijay:私はviewModelを表示するために私の質問を編集しました。私は、示されているようにPropertyChangedイベントをトリガーしようとします。これは間違っていますか? –
@TobyHolland starUpSplashWindow.InvalidateVisual();を呼び出さないでください。何が起こるかを見て、それが原因でUI更新が発生していないかどうかはわかりません。 –