private void ParentTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
 {
     if (ParentTree.SelectedItem != null)
     {
         Frame.ShowLoading();
         TreeViewItem item = (TreeViewItem)ParentTree.SelectedItem;
         if (item.Tag == null)
         {
             Thread thread = new Thread(() =>
             {
                 ViewModel.Items.Clear();
                 foreach (var key in ViewModel.EntityContext.GetKeys())
                 {
                     ViewModel.Items.Add(key);
                 }
                 ViewModel.UpdateSource();
                 Dispatcher.Invoke(new Action(() => Frame.HideLoading()));
             });
             thread.Start();
         }
         else
         {
             Guid[] parents = (Guid[])item.Tag;
             Thread thread  = new Thread(() =>
             {
                 ViewModel.Items.Clear();
                 foreach (var key in ViewModel.EntityContext.InParent(parents))
                 {
                     ViewModel.Items.Add(key);
                 }
                 ViewModel.UpdateSource();
                 Dispatcher.Invoke(new Action(() => Frame.HideLoading()));
             });
             thread.Start();
         }
     }
 }
        private void Initialize(EntityViewerViewModel <TEntity> viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel");
            }
            ViewModel = viewModel;
            viewModel.PropertyChanged += viewModel_PropertyChanged;
            viewModel.PageSize         = 30;

            if (ViewModel.Items.Count == 0 && ViewModel.ParentModels == null)
            {
                viewModel.ParentModels = EntityParentSelectorViewModel.CreateModel <TEntity>(BussinessApplication.Current.ContextBuilder);
            }

            Grid grid = new Grid();

            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(100, GridUnitType.Star)
            });
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(100, GridUnitType.Pixel)
            });
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = new GridLength(200, GridUnitType.Pixel)
                });
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = new GridLength(1, GridUnitType.Star)
                });

                ParentTree = new TreeView();
                ParentTree.BorderThickness = new Thickness();
                TreeViewItem item = new TreeViewItem();
                item.Header      = "全部";
                item.IsExpanded  = true;
                item.ItemsSource = GetParentItems(viewModel.ParentModels);
                ParentTree.Items.Add(item);
                ParentTree.SelectedItemChanged += ParentTree_SelectedItemChanged;
                item.Margin = new Thickness(0, 0, 8, 0);
                grid.Children.Add(ParentTree);

                GridSplitter splitter = new GridSplitter();
                splitter.Width = 8;
                splitter.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
                grid.Children.Add(splitter);
            }


            #region 列表显示

            ListView dataGrid = new ListView();
            dataGrid.MouseDoubleClick += dataGrid_MouseDoubleClick;
            dataGrid.BorderThickness   = new Thickness();
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                Grid.SetColumn(dataGrid, 1);
            }
            dataGrid.SelectionMode = SelectionMode.Extended;
            GridView view = new GridView();
            view.AllowsColumnReorder = false;
            var entityType        = typeof(TEntity);
            var viewBuilder       = viewModel.ViewBuilder;
            var visableProperties = viewBuilder.VisableProperties;
            var hideProperties    = viewBuilder.HideProperties;

            PropertyInfo[] properties;
            if (hideProperties == null)
            {
                properties = visableProperties.Select(v => entityType.GetProperty(v)).Where(t => t != null).ToArray();
            }
            else
            {
                properties = visableProperties.Except(hideProperties).Select(v => entityType.GetProperty(v)).Where(t => t != null).ToArray();
            }

            foreach (var property in properties)
            {
                GridViewColumn column  = new GridViewColumn();
                var            display = property.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault() as DisplayAttribute;
                if (display == null)
                {
                    column.Header = property.Name;
                }
                else
                {
                    column.Header = new Label {
                        Content = display.Name, ToolTip = display.Description
                    }
                };

                DataTemplate            dt  = new DataTemplate();
                FrameworkElementFactory fef = new FrameworkElementFactory(typeof(Label));
                Binding binding             = new Binding();
                binding.Path = new PropertyPath(property.Name);
                fef.SetBinding(Label.ContentProperty, binding);
                dt.VisualTree       = fef;
                column.CellTemplate = dt;
                view.Columns.Add(column);
            }
            dataGrid.View = view;

            viewModel.UpdateSource();
            dataGrid.DataContext = viewModel;
            dataGrid.SetBinding(DataGrid.ItemsSourceProperty, new Binding("ItemsSource"));

            grid.Children.Add(dataGrid);

            #endregion

            #region  钮显示

            AppButtonPanel = new AppButtonPanel();
            Grid.SetRow(AppButtonPanel, 1);
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                Grid.SetColumnSpan(AppButtonPanel, 2);
            }
            grid.Children.Add(AppButtonPanel);

            AppButton back = new AppButton(new CustomCommand(null, Back));
            back.Text  = "返回";
            back.Image = (Canvas)Resources["appbar_arrow_left"];
            AppButtonPanel.Items.Add(back);

            AppButton previousPage = new AppButton(new CustomCommand(CanPreviousPage, PreviousPage));
            previousPage.Text  = "上一页";
            previousPage.Image = (Canvas)Resources["appbar_navigate_previous"];
            AppButtonPanel.Items.Add(previousPage);

            AppButton nextPage = new AppButton(new CustomCommand(CanNextPage, NextPage));
            nextPage.Text  = "下一页";
            nextPage.Image = (Canvas)Resources["appbar_navigate_next"];
            AppButtonPanel.Items.Add(nextPage);


            AppButton ok = new AppItemButton(dataGrid, OK);
            ok.Text  = "选择";
            ok.Image = (Canvas)Resources["appbar_check"];
            AppButtonPanel.Items.Add(ok);

            #endregion

            Content = grid;

            Loaded += Viewer_Loaded;
        }
Beispiel #3
0
        private void Initialize(EntityViewerViewModel <TEntity> viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel");
            }

            Buttons = new System.Collections.ObjectModel.ObservableCollection <AppButton>();
            Buttons.CollectionChanged += Buttons_CollectionChanged;

            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml") });
            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml") });
            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml") });
            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml") });
            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml") });
            //Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("pack://application:,,,/Wodsoft.ComBoost.Business.Remote;component/Resources/Icons.xaml") });

            ViewModel = viewModel;
            viewModel.PropertyChanged += viewModel_PropertyChanged;
            viewModel.PageSize         = 30;

            if (viewModel.AutoGenerateData && ViewModel.Items.Count == 0 && ViewModel.ParentModels == null)
            {
                viewModel.ParentModels = EntityParentSelectorViewModel.CreateModel <TEntity>(BussinessApplication.Current.ContextBuilder);
            }

            Grid grid = new Grid();

            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(100, GridUnitType.Star)
            });
            grid.RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(100, GridUnitType.Pixel)
            });
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = new GridLength(200, GridUnitType.Pixel)
                });
                grid.ColumnDefinitions.Add(new ColumnDefinition {
                    Width = new GridLength(1, GridUnitType.Star)
                });

                ParentTree = new TreeView();
                ParentTree.BorderThickness = new Thickness();
                TreeViewItem item = new TreeViewItem();
                item.Header      = "全部";
                item.IsExpanded  = true;
                item.ItemsSource = GetParentItems(viewModel.ParentModels);
                ParentTree.Items.Add(item);
                ParentTree.SelectedItemChanged += ParentTree_SelectedItemChanged;
                item.Margin = new Thickness(0, 0, 8, 0);
                grid.Children.Add(ParentTree);

                GridSplitter splitter = new GridSplitter();
                splitter.Width = 8;
                splitter.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
                grid.Children.Add(splitter);
            }


            #region 列表显示
            View = new ListView();
            View.BorderThickness = new Thickness();
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                Grid.SetColumn(View, 1);
            }
            View.SelectionMode = SelectionMode.Single;
            GridView view = new GridView();
            view.AllowsColumnReorder = false;
            var entityType        = typeof(TEntity);
            var viewBuilder       = viewModel.ViewBuilder;
            var visableProperties = viewBuilder.VisableProperties;
            var hideProperties    = viewBuilder.HideProperties;

            PropertyInfo[] properties;
            if (hideProperties == null)
            {
                properties = visableProperties.Select(v => entityType.GetProperty(v)).Where(t => t != null).ToArray();
            }
            else
            {
                properties = visableProperties.Except(hideProperties).Select(v => entityType.GetProperty(v)).Where(t => t != null).ToArray();
            }

            foreach (var property in properties)
            {
                GridViewColumn column  = new GridViewColumn();
                var            display = property.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault() as DisplayAttribute;
                if (display == null)
                {
                    column.Header = property.Name;
                }
                else
                {
                    column.Header = new Label {
                        Content = display.Name, ToolTip = display.Description
                    }
                };

                DataTemplate            dt  = new DataTemplate();
                FrameworkElementFactory fef = new FrameworkElementFactory(typeof(Label));
                Binding binding             = new Binding();
                binding.Path = new PropertyPath(property.Name);
                fef.SetBinding(Label.ContentProperty, binding);
                dt.VisualTree       = fef;
                column.CellTemplate = dt;
                view.Columns.Add(column);
            }
            View.View = view;

            viewModel.UpdateSource();
            View.DataContext = viewModel;
            View.SetBinding(DataGrid.ItemsSourceProperty, new Binding("ItemsSource"));

            grid.Children.Add(View);

            #endregion

            #region  钮显示

            AppButtonPanel = new AppButtonPanel();
            Grid.SetRow(AppButtonPanel, 1);
            if (viewModel.ParentModels != null && viewModel.ParentModels.Length != 0)
            {
                Grid.SetColumnSpan(AppButtonPanel, 2);
            }
            grid.Children.Add(AppButtonPanel);

            AppButton back = new AppButton(new CustomCommand(null, Back));
            back.Text  = "返回";
            back.Image = (Canvas)Resources["appbar_arrow_left"];
            AppButtonPanel.Items.Add(back);

            //AppButton firstPage = new AppButton(new CustomCommand(CanFirstPage, FirstPage));
            //firstPage.Text = "第一页";
            //firstPage.Image = (Canvas)Application.Current.Resources["appbar_navigate_previous"];
            //AppButtonPanel.Items.Add(firstPage);

            AppButton previousPage = new AppButton(new CustomCommand(CanPreviousPage, PreviousPage));
            previousPage.Text  = "上一页";
            previousPage.Image = (Canvas)Resources["appbar_navigate_previous"];
            AppButtonPanel.Items.Add(previousPage);

            AppButton nextPage = new AppButton(new CustomCommand(CanNextPage, NextPage));
            nextPage.Text  = "下一页";
            nextPage.Image = (Canvas)Resources["appbar_navigate_next"];
            AppButtonPanel.Items.Add(nextPage);

            if (viewModel.ViewBuilder.AllowedAdd)
            {
                AppButton add = new AppButton(new CustomCommand(CanAdd, Add));
                add.Text  = "新增";
                add.Image = (Canvas)Resources["appbar_add"];
                AppButtonPanel.Items.Add(add);
            }

            if (viewModel.ViewBuilder.AllowedRemove)
            {
                AppButton remove = new AppItemButton(View, CanRemove, Remove);
                remove.Text  = "删除";
                remove.Image = (Canvas)Resources["appbar_delete"];
                AppButtonPanel.Items.Add(remove);
            }

            if (viewModel.ViewBuilder.AllowedEdit)
            {
                AppButton edit = new AppItemButton(View, CanEdit, Edit);
                edit.Text  = "编辑";
                edit.Image = (Canvas)Resources["appbar_edit"];
                AppButtonPanel.Items.Add(edit);
            }

            #endregion

            Content = grid;

            Loaded += Viewer_Loaded;
        }