基于ArcGIS Pro SDK的MVVM架构

示例结果展示

基于ArcGIS Pro SDK的MVVM架构_第1张图片

文件夹创建

基于ArcGIS Pro SDK的MVVM架构_第2张图片

相对于原始C#,少了Command文件夹里的类。该文件中的RelayCommand使用 ArcGIS.Desktop.Framework

Properties属性配置,主要用于设置执行程序路径(自带文件夹)

DarkImages用于存放深色图片(自带文件夹)

Images用于存放浅色图片(自带文件夹)

DataHelper存放测试数据,或者是从数据库读取到数据

Model用于存放类数据Student类等

View存放前端界面

ViewModel存放View和Model之间处理的事件及方法,属性。

代码

DataHelper

StudentDataHelper

using ProAppModuleMVVM.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProAppModuleMVVM.DataHelper
{
    internal class StudentDataHelper
    {
        public static ObservableCollection GetStudent()
        {
            ObservableCollection sampleStudent = new ObservableCollection();
            sampleStudent.Add(new Student() { Id = 0, TeacherId = 0, Name = "学生0", Age = 33 });
            sampleStudent.Add(new Student() { Id = 1, TeacherId = 0, Name = "学生1", Age = 22 });
            sampleStudent.Add(new Student() { Id = 2, TeacherId = 1, Name = "学生2", Age = 35 });
            sampleStudent.Add(new Student() { Id = 3, TeacherId = 0, Name = "学生3", Age = 27 });
            return sampleStudent;
        }
    }
}

TeacherDataHelper

using ArcGIS.Core.Data.UtilityNetwork.Trace;
using ProAppModuleMVVM.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProAppModuleMVVM.DataHelper
{
    internal class TeacherDataHelper
    {
        public static ObservableCollection GetTeacher()
        {
            ObservableCollection sampleTeacher = new ObservableCollection();
            sampleTeacher.Add(new Teacher() { Id = 0, Name = "老师0", Age = 33 });
            sampleTeacher.Add(new Teacher() { Id = 1, Name = "老师1", Age = 22 });
            sampleTeacher.Add(new Teacher() { Id = 2, Name = "老师2", Age = 35 });
            sampleTeacher.Add(new Teacher() { Id = 3, Name = "老师3", Age = 27 });
            return sampleTeacher;
        }
    }
}

Model

Student

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProAppModuleMVVM.Model
{
    internal class Student
    {
        public long Id { get; set; }
        public long TeacherId { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

Teacher

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProAppModuleMVVM.Model
{
    internal class Teacher
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public List Students { get; set; }
    }
}

View

文件夹分布

右键添加-》新建项目

基于ArcGIS Pro SDK的MVVM架构_第3张图片

ProWindow1.xaml


    
        
    
    
        
            
                
            
        
    
    
        
            
                
                    
                        
                            
                                
                                
                            
                            
                            
                        
                    
                
                
                    
                        
                            
                                
                                
                            
                            
                            
                        
                    
                
            
        
        
    

ShowProWindow1.cs该类是自动生成的,主要用于显示窗口,配合Config.daml使用

基于ArcGIS Pro SDK的MVVM架构_第4张图片

ViewModel

ProWindow1ViewModel

using ArcGIS.Desktop.Framework;
using ProAppModuleMVVM.DataHelper;
using ProAppModuleMVVM.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace ProAppModuleMVVM.ViewModel
{
    internal class ProWindow1ViewModel : INotifyPropertyChanged
    {
        #region Fields
        private string _searchText;
        private ObservableCollection _resultList;
        #endregion 

        #region Properties

        public ObservableCollection StudentList { get; private set; }
        public ObservableCollection TeacherList { get; private set; }

        // 查询关键字
        public string SearchText
        {
            get { return _searchText; }
            set
            {
                _searchText = value;
                RaisePropertyChanged("SearchText");
            }
        }

        // 查询结果
        public ObservableCollection ResultList
        {
            get { return _resultList; }
            set
            {
                _resultList = value;
                RaisePropertyChanged("ResultList");
            }
        }

        public ICommand DeleteCommand
        {
            get { return new RelayCommand(Deleting, CanDeleting); }
        }

        #endregion 

        #region Construction
        public ProWindow1ViewModel()
        {
            StudentList = StudentDataHelper.GetStudent();
            TeacherList = TeacherDataHelper.GetTeacher();
            foreach (Teacher teacher in TeacherList)
            {
                teacher.Students = new List();
                foreach (Student student in StudentList)
                {
                    if (student.TeacherId == teacher.Id)
                    {
                        teacher.Students.Add(student);
                    }
                }
            }
            _resultList = TeacherList;
        }

        #endregion

        #region Command Handler
        public void Deleting()
        {
            foreach (Teacher teacher in ResultList.ToList())
            {
                if (teacher.Id == 0)
                {
                    ResultList.Remove(teacher);
                }
            }
        }

        public bool CanDeleting()
        {
            return true;
        }

        #endregion 

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        #region Methods
        private void RaisePropertyChanged(string propertyName)
        {
            // take a copy to prevent thread issues
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion 
    }
}

结果

基于ArcGIS Pro SDK的MVVM架构_第5张图片

基于ArcGIS Pro SDK的MVVM架构_第6张图片

参考文献

【C#】MVVM架构-CSDN博客

你可能感兴趣的:(ArcGISProSDK,ArcGISProSDK)