2017-02-21 18 views
0

私は投影ウィンドウ(similar to the sample app)を開くUWPアプリケーションを持っています。今私はどちらのウィンドウがアクティブであるかにかかわらず、両方のウィンドウでRotationChanged -Eventに反応します。UWP:RadialControllerで2つのウィンドウを同時に制御します

RadialControllerのインスタンスをどうにか共有できますか?または、1つのビューでそれを管理し、手動でイベントを2番目のビューに渡す必要がありますか?

質問:両方のウィンドウで同じViewModelインスタンスを使用するにはどうすればよいですか?

P.s:RadialControllerおよび/またはSurface-Dialを追加するとタグが意味をなされる可能性があります。

答えて

0

残念ながら、それはのように単純ではありません@ IInspectableと同じViewModelを使用しています。だから私はすべてDial_RotationChangedの2番目のビューにコマンドを送りました。私が期待していたほど美味しくはありませんが、それまではかなりうまくいきました。

コードは次のように多少なります

private async void Dial_RotationChanged(RadialController sender, 
             RadialControllerRotationChangedEventArgs args) 
{ 
    await ProjectionViewPageControl.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
    () => 
    { 
     var thePage = (DetailPage)((Frame)Window.Current.Content).Content; 
     thePage.ProjectionTest(args.RotationDeltaInDegrees); 
    }); 
} 
0

UWPを使用すると、MVVMパターンを使用することになっていると思います。

MVVMパターンを使用している場合、複数のGUI要素(Windowsが含まれている)を1つのViewModelの変更に対応させるのは簡単です。 本当の質問は、MVVMパターン、別のパターン、まったくパターンを使用していませんか?

あなたが最初にそれを学ぶ必要がある場合は、私は(UWPが投入されたアプリケーションに関連したバックエンドのもので、WPFのフォローアップである)WPFに係るそれについて何かを書いた: https://social.msdn.microsoft.com/Forums/vstudio/en-US/b1a8bf14-4acd-4d77-9df8-bdb95b02dbe2/lets-talk-about-mvvm?forum=wpf

+0

私はそれが簡単ということであるか分かりません。 'CoreWindow'がそれぞれ専用のスレッドで実行され、非アジャイルな型であるため、ある種のマーシャリングを実装する必要があります。 C#言語のプロジェクションがすでにマーシャリングを実装していない限り、あなたには責任があります。しかし、私は間違っている可能性があります。 – IInspectable

+0

幸運なことに、WPF/UWPはディスパッチャとマルチスレッドを念頭に置いて設計されました:http://stackoverflow.com/questions/32671719/uwp-updating-ui-through-data-binding-from-a-background-thread Bindingクラスを使用せずにBindingコードを手動で記述する必要があるかもしれませんが、それはそれに関するものです。まれにViewsideコードが必要なケースの1つです(これはViewsideの問題です)。 GUI要素が代替スレッド(メイン/元のスレッドがデフォルトです)に入っているのはちょっと奇妙ですが、重いものを描くのは間違いありません。 – Christopher

+0

まず、MVVMを使用しています。あなたの投稿の後、私は両方のWindowsを同じViewModelにバインドしようとしていましたが、2つの別々のインスタンスで終了しました: - /そのため、Dispatcherを使用して2つ目のウィンドウにイベントを手動で送信する必要がありますか? – Thomas

関連する問題