/// <summary> /// リージョンのViewを削除する /// </summary> private void RemoveImagePanelViewRegions() { foreach (var name in RegionNames.GetImageContentRegionNames(_contentCount)) { _regionManager.Regions[name].RemoveAll(); } }
/// <summary> /// 指定Countに対応する画像RegionのViewsを取得(2画面なら 2_0 → 2_1 を返す) /// </summary> /// <returns></returns> //private IEnumerable<T> GetImageContentViews<T>() where T : FrameworkElement => // RegionNames.GetImageContentRegionNames(_contentCount) // .Select(name => _regionManager.Regions[name].Views.Cast<T>().FirstOrDefault()); /// <summary> /// Viewを作成してリージョンに登録する /// </summary> private void RegisterImagePanelViewRegions(int contentIndexOffset = 0) { var regionNames = RegionNames.GetImageContentRegionNames(_contentCount); foreach (var(name, index) in regionNames.Indexed()) { _regionManager.RegisterViewWithRegion(name, () => { var contentIndex = (index + contentIndexOffset) % _contentCount; var parameters = ImageViewParameterFactory.GetImageViewParameters(contentIndex, _contentCount); return(_container.Resolve <ImagePanel>(parameters)); }); } }
/// <summary> /// 画像(ViewModel)を右回りで入れ替え /// </summary> /// <param name="rightShiftRequest">右シフト回数</param> private void RightShiftViewModels(int rightShiftRequest = 1) { if (_contentCount <= 1) { return; // 回転する必要なし } if (rightShiftRequest == 0) { return; } #if true // Vの作り直し RemoveImagePanelViewRegions(); // 画像コンテンツ番号のシフト量(これまでの累積回転数を考慮) var indexShift = (-(_rightShiftCounter + rightShiftRequest)) % _contentCount; if (indexShift < 0) { indexShift += _contentCount; } RegisterImagePanelViewRegions(indexShift); #elif false // Vの入れ替え var views = GetImageContentViews <FrameworkElement>().ToList().RightShift(rightShift); foreach (var(name, index) in RegionNames.GetImageContentRegionNames(_contentCount).Indexed()) { _regionManager.Regions[name].RemoveAll(); _regionManager.RegisterViewWithRegion(name, () => views[index]); } #else // VMの入れ替え var views = GetImageContentViews <FrameworkElement>().ToArray(); var vmodels = views.Select(x => x.DataContext).ToArray().AsSpan() .RightShift(rightShift); for (int i = 0; i < views.Length; i++) { views[i].DataContext = vmodels[i]; } #endif // ViewModel内の回転数を加算 _rightShiftCounter += rightShiftRequest; }