public ImageScrollViewerViewModel(IContainerExtension container, IRegionManager regionManager, MyImage myImage) { ImageSource = myImage.ObserveProperty(x => x.ImageSource).ToReadOnlyReactiveProperty(mode: ReactivePropertyMode.None); // ズーム倍率のデバッグ表示 ImageZoomPayload .Subscribe(x => Console.WriteLine($"VM-ZoomMagRatio: {x.IsEntire} => {(x.MagRatio * 100.0):f2} %")); // スクロール位置のデバッグ表示 ImageScrollOffsetCenter .Subscribe(x => Console.WriteLine($"VM-ScrollOffsetRatio: {x.Width:f2} x {x.Height:f2}")); ZoomAllCommand .Subscribe(x => { // 全画面の再要求を行うと、Viewで設定した倍率をクリアしてしまうので行わない if (!ImageZoomPayload.Value.IsEntire) { ImageZoomPayload.Value = new ImageZoomPayload(true, double.NaN); } }); ZoomX1Command .Subscribe(x => ImageZoomPayload.Value = new ImageZoomPayload(false, 1.0)); OffsetCenterCommand .Subscribe(x => ImageScrollOffsetCenter.Value = new Size(0.5, 0.5)); }
public ImageScrollControlViewModel(IContainerExtension container, IRegionManager regionManager) { var mainImages = container.Resolve <MainImages>(); var viewSettings = container.Resolve <ViewSettings>(); IsImageViewerInterlock = viewSettings.ObserveProperty(x => x.IsImageViewerInterlock).ToReadOnlyReactiveProperty(); CanVisibleReducedImage = viewSettings.ObserveProperty(x => x.CanVisibleReducedImage).ToReadOnlyReactiveProperty(); IsSamplingFrameOnImage = new[] { viewSettings.ObserveProperty(x => x.IsVisibleImageOverlapSamplingFrame), viewSettings.ObserveProperty(x => x.IsSamplingFrameOnImage) } .CombineLatestValuesAreAllTrue() .ToReadOnlyReactiveProperty(); IsSamplingFrameOnScrollContent = new[] { viewSettings.ObserveProperty(x => x.IsVisibleImageOverlapSamplingFrame), viewSettings.ObserveProperty(x => x.IsSamplingFrameOnImage).Inverse() } .CombineLatestValuesAreAllTrue() .ToReadOnlyReactiveProperty(); // 画像管理クラスのインデックスを取得 int index = mainImages.GetImageIndex(); LoadImageCommand.Subscribe(x => mainImages.LoadImage(index)); ImageSource = mainImages.ImageSources[index].ObserveProperty(x => x.ImageSource) .ToReadOnlyReactiveProperty(mode: ReactivePropertyMode.None); // View通知情報のデバッグ表示 ImageZoomPayload .Subscribe(x => Console.WriteLine($"VM({index})-ZoomMagRatio: {x.IsEntire} => {(x.MagRatio * 100.0):f2} %")); ImageScrollOffsetCenterRatio .Subscribe(x => Console.WriteLine($"VM({index})-ScrollOffsetRatio: ({x.X:f2}, {x.Y:f2})")); SamplingFrameRect .Subscribe(x => Console.WriteLine($"VM({index})-SamplingFrameRect: ({x.X:f2}, {x.Y:f2}) {x.Width:f2} x {x.Height:f2}")); ZoomAllCommand .Subscribe(x => { // 全画面の再要求を行うと、Viewで設定した倍率をクリアしてしまうので行わない if (!ImageZoomPayload.Value.IsEntire) { ImageZoomPayload.Value = new ImageZoomPayload(true, double.NaN); } }); ZoomX1Command .Subscribe(x => ImageZoomPayload.Value = new ImageZoomPayload(false, 1.0)); OffsetCenterCommand .Subscribe(x => ImageScrollOffsetCenterRatio.Value = new Point(0.5, 0.5)); //PointTest.Subscribe(x => Console.WriteLine($"VM-PointTest: {x}")); }