相对于原始C#,少了Command文件夹里的类。该文件中的RelayCommand使用 ArcGIS.Desktop.Framework
Properties属性配置,主要用于设置执行程序路径(自带文件夹)
DarkImages用于存放深色图片(自带文件夹)
Images用于存放浅色图片(自带文件夹)
DataHelper存放测试数据,或者是从数据库读取到数据
Model用于存放类数据Student类等
View存放前端界面
ViewModel存放View和Model之间处理的事件及方法,属性。
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;
}
}
}
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;
}
}
}
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; }
}
}
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; }
}
}
右键添加-》新建项目
ShowProWindow1.cs该类是自动生成的,主要用于显示窗口,配合Config.daml使用
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
}
}
【C#】MVVM架构-CSDN博客