私はWPFとPrismを使用する小さなアプリケーションを持っています。私は自分のシェルと2つのモジュールを持っています。私は彼らが正常にナビゲーションのために配線されていることを知っているので、私は正常にファッション(例えば、ボタンのクリックから)の間で正常にナビゲートすることができます。しかし、完了時にイベントを発生させる非同期操作を実行すると、そのイベントハンドラ内からナビゲートできなくなります。私が最後に試したことは、Event Aggregationを使用してイベントをUIスレッドに公開することでしたが、まだナビゲートしていません。イベントへのサブスクライバは、イベントを正常に取得し、RequestNavigate(...)を起動しますが、UIは更新されません。今Prismでコールバックメソッド内をナビゲートできません
、いくつかのコード: 私の最初のモジュールLoginModule
ためのviewmodel:私は間違っているかもしれないものに
public class RosterViewModel : IRosterViewModel, INavigationAware
{
private readonly IEventAggregator _eventAggregator;
private readonly IRegionManager _regionManager;
[ImportingConstructor]
public RosterViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
{
_regionManager = regionManager;
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<UserAuthenticatedEvent>().Subscribe(o =>
{
Console.WriteLine("Requesting navigation...");
_regionManager.RequestNavigate(RegionNames.ContentRegion, new Uri(WellKnownViewNames.RosterView, UriKind.Relative));
});
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
Console.WriteLine("I'm here at the RosterViewModel");
}
}
任意のヒント:私の第二のモジュールRosterModule
ため
public class LoginViewModel : ViewModelBase, ILoginViewModel, INavigationAware
{
...
[ImportingConstructor]
public LoginViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator)
{
_regionManager = regionManager;
_container = container;
_eventAggregator = eventAggregator;
}
private DelegateCommand _Login;
public DelegateCommand Login
{
get
{
if (_Login == null)
_Login = new DelegateCommand(() => LoginHandler());
return _Login;
}
}
private void LoginHandler()
{
_client = new JabberClient();
_client.Server = "gmail.com";
_client.User = Username;
_client.Password = Password;
...
_client.OnAuthenticate += client_OnAuthenticate;
_client.Connect();
}
private void client_OnAuthenticate(object sender)
{
Console.WriteLine("Authenticated!");
_eventAggregator.GetEvent<UserAuthenticatedEvent>().Publish("");
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
...
}
のViewModel?そのわずか数分投稿後、私は昨日に走ったと私は逃した何かを見て記事を再読OP、[OK]を
から、
なぜあなたはそれを答えにしませんでしたか? – HichemSeeSharp
解決したコメントを回答にコピーして回答してください。これはいつか他の誰かを助けることができます。 –
@ Jason:あなたの解答を答えに加え、答えとしてマークしてください。答えとしてマークしないと、同じ問題の解を探している人々は、リストに未回答。また、解決策を知っていて、それに答えることを望む人々は、この記事を読む時間を投資した後に失望するだろう。 –