/// <summary>
        /// コンストラクタ
        /// DIでModel層を注入する
        /// </summary>
        /// <param name="workitemManager"></param>
        public WorklistViewModel(IRegionManager regionManager, WorkitemManager workitemManager, TitleMessenger titleMessenger)
        {
            this._regionManager   = regionManager;
            this._workitemManager = workitemManager;
            this._titleMessenger  = titleMessenger;

            this.Studies = this._workitemManager.Workitems
                           .ToReadOnlyReactiveCollection(x => new WorkitemViewModel(x));

            this.StudiesView        = CollectionViewSource.GetDefaultView(this.Studies);
            this.StudiesView.Filter = this.WorkitemFilter;

            this.SelectedStudy = new ReactiveProperty <WorkitemViewModel>()
                                 .SetValidateAttribute(() => this.SelectedStudy);

            this.ClearCommand = new ReactiveCommand()
                                .WithSubscribe(this._workitemManager.ClearWorkitems);

            this.ReloadCommand = new ReactiveCommand()
                                 .WithSubscribe(() => this.ReloadWorkitems());

            this.NavigateDetailCommand = this.SelectedStudy
                                         .ObserveHasErrors
                                         .Inverse()
                                         .ToReactiveCommand()
                                         .WithSubscribe(() => this.NavigateToDetailWithParams());

            this.ChangeTitleCommand = new ReactiveCommand()
                                      .WithSubscribe(() => this._titleMessenger.ChangeTitle("Worklist"));

            this.TextFilter.Subscribe(_ => this.Refresh());
        }
 public static void DeactivateWorkitemInRegion(this IRegionManagerExtension regionManager, IRegion region, IWorkItem workItem)
 {
     foreach (DependencyObject view in region.Views.OfType <DependencyObject>())
     {
         IWorkItem owner = WorkitemManager.GetOwner(view);
         if (workItem.Equals(owner))
         {
             region.Deactivate(view);
         }
     }
 }
        /// <summary>
        /// コンストラクタ
        /// DIでModel層を注入する
        /// </summary>
        /// <param name="workitemManager"></param>
        public WorklistViewModel(WorkitemManager workitemManager)
        {
            this._workitemManager = workitemManager;

            this.Studies = this._workitemManager.Workitems
                           .ToReadOnlyReactiveCollection(x => new WorkitemViewModel(x));

            this.StudiesView = CollectionViewSource.GetDefaultView(this.Studies);

            this.ClearCommand = new ReactiveCommand()
                                .WithSubscribe(this._workitemManager.ClearWorkitems);

            this.ReloadCommand = new ReactiveCommand()
                                 .WithSubscribe(() => this.ReloadWorkitems());
        }
 public static void ActivateWorkitemInRegion(this IRegionManagerExtension regionManager, IRegion region, IWorkItem workItem)
 {
     foreach (DependencyObject view in region.Views.OfType <DependencyObject>())
     {
         CommonServiceLocator.ServiceLocator.Current.GetInstance <ITaskManager>()
         .RunUIThread(() =>
         {
             IWorkItem owner = WorkitemManager.GetOwner(view);
             if (workItem.Equals(owner) && region.Views.Contains(view))
             {
                 region.Activate(view);
             }
         });
     }
 }
Exemplo n.º 5
0
        protected override object RegisterView(object view, string region)
        {
            if (view is DependencyObject)
            {
                WorkitemManager.SetOwner(view as DependencyObject, WorkItem);
            }

            if (view is FrameworkElement)
            {
                object viewModel = ((FrameworkElement)view).DataContext;
                if (viewModel != null)
                {
                    var interfaceImplType = viewModel.GetType().GetGenericInterface(typeof(IWorkitemAware <>));
                    if (interfaceImplType != null)
                    {
                        var initType = interfaceImplType.GetGenericArguments()[0];

                        // initialize
                        if (initType.IsAssignableFrom(WorkItem.GetType()))
                        {
                            var methodInfo = viewModel.GetType().GetMethod("SetWorkitem", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                            methodInfo.Invoke(viewModel, new object[] { WorkItem });
                        }
                        else
                        {
                            throw new ArgumentException($"Workitem supports initialization only by {initType}");
                        }
                    }

                    if (viewModel is IDisposable)
                    {
                        Disposable((IDisposable)viewModel);
                    }
                }

                if (view is IDisposable)
                {
                    Disposable((IDisposable)view);
                }
            }
            return(view);
        }