基于ArcGIS Pro SDK的MVVM架构

这篇具有很好参考价值的文章主要介绍了基于ArcGIS Pro SDK的MVVM架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

示例结果展示

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

文件夹创建

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

相对于原始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<Student> GetStudent()
        {
            ObservableCollection<Student> sampleStudent = new ObservableCollection<Student>();
            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<Teacher> GetTeacher()
        {
            ObservableCollection<Teacher> sampleTeacher = new ObservableCollection<Teacher>();
            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<Student> Students { get; set; }
    }
}

View

文件夹分布

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

右键添加-》新建项目

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

ProWindow1.xaml

<controls:ProWindow x:Class="ProAppModuleMVVM.View.ProWindow1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:controls="clr-namespace:ArcGIS.Desktop.Framework.Controls;assembly=ArcGIS.Desktop.Framework"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:extensions="clr-namespace:ArcGIS.Desktop.Extensions;assembly=ArcGIS.Desktop.Extensions"
        xmlns:viewmodel="clr-namespace:ProAppModuleMVVM.ViewModel"
        xmlns:model="clr-namespace:ProAppModuleMVVM.Model"
        mc:Ignorable="d"
        Title="ProWindow1" Height="300" Width="300"
        WindowStartupLocation="CenterOwner"
    >
    <controls:ProWindow.DataContext>
        <viewmodel:ProWindow1ViewModel />
    </controls:ProWindow.DataContext>
    <controls:ProWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <extensions:DesignOnlyResourceDictionary Source="pack://application:,,,/ArcGIS.Desktop.Framework;component\Themes\Default.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </controls:ProWindow.Resources>
    <Grid>
        <TreeView
                BorderThickness="0"
                ItemsSource="{Binding ResultList, Mode=TwoWay}"
                VirtualizingPanel.IsVirtualizing="True">
            <TreeView.Resources>
                <DataTemplate DataType="{x:Type model:Student}">
                    <StackPanel 
                            Orientation="Horizontal" 
                            Margin="2">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto"/>
                                <ColumnDefinition Width="auto"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="{Binding Name, StringFormat=学生姓名:\{0\}}" Margin="5,1" />
                            <TextBlock Grid.Column="1" Text="{Binding Age, StringFormat=学生年龄:\{0\}}" Margin="5,1" />
                        </Grid>
                    </StackPanel>
                </DataTemplate>
                <HierarchicalDataTemplate DataType="{x:Type model:Teacher}" ItemsSource="{Binding Students, Mode=OneWay}">
                    <StackPanel
                            Margin="2"
                            Orientation="Horizontal">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto" />
                                <ColumnDefinition Width="auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock
                                    Grid.Column="0"
                                    Margin="5,1"
                                    Text="{Binding Name, StringFormat=老师姓名:\{0\}}" />
                            <TextBlock
                                    Grid.Column="1"
                                    Margin="10,0"
                                    Text="{Binding Age, StringFormat=老师年龄:\{0\}}" />
                        </Grid>
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>
        <Button Content="删除老师0" Grid.Row="1" Height="20" Command="{Binding DeleteCommand}" Style="{DynamicResource Esri_SimpleButton}"></Button>
    </Grid>
</controls:ProWindow>

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

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

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<Teacher> _resultList;
        #endregion 

        #region Properties

        public ObservableCollection<Student> StudentList { get; private set; }
        public ObservableCollection<Teacher> TeacherList { get; private set; }

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

        // 查询结果
        public ObservableCollection<Teacher> 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<Student>();
                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架构,ArcGISProSDK,ArcGISProSDK

基于ArcGIS Pro SDK的MVVM架构,ArcGISProSDK,ArcGISProSDK

参考文献

【C#】MVVM架构-CSDN博客文章来源地址https://www.toymoban.com/news/detail-835723.html

到了这里,关于基于ArcGIS Pro SDK的MVVM架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《ArcGIS Runtime SDK for Android开发笔记1》——基于Android Studio构建ArcGIS Android开发环境(在线部署)

    (最近要做个课设,顺便记录分享一些内容。) 一. 简介 1. 概述:ArcGIS Runtime SDK for Android是Esri公司开发的一种工具包,用于在Android设备上创建和部署地理信息系统(GIS)应用程序。它提供了一套强大的API,使开发者能够利用各种地理数据和功能,构建具有地图显示、地理查

    2024年01月19日
    浏览(44)
  • 基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析

    详情点击链接:基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析 生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。生态系统服务单一化会导致各项服务能力持续

    2024年02月07日
    浏览(64)
  • VisualStudio[WPF/.NET]基于CommunityToolkit.Mvvm架构开发

    项目模板选择如下: 暂时随机填一个目标框架,待会改: 双击“解决方案资源管理器”中项目CU-APP, 打开项目工程文件CU-APP.csproj, 修改目标框架 TargetFramework 为.net framework 4.7.2 ;  C#语言版本 LangVersion 为  9.0  \\\"工具\\\" - \\\"NuGet包管理器\\\",“管理解决方案的NuGet程序包(N)”,  或者,

    2024年02月07日
    浏览(40)
  • 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局

    近年来,由于社会经济的快速发展和人口增长,社会活动对环境的压力不断增大,人地矛盾加剧。虽然全球各国在生态环境的建设和保护上已取得不少成果,但还是未从根本上转变生态环境的恶化趋势;生态破坏、环境退化、生物多样性减少及其所诱发的环境灾害、灾难不但

    2023年04月25日
    浏览(50)
  • 大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端

    前言:苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。 之前一直想写个 WanAndroid 项目来巩固自己对 Kotlin+Jetpack+协程 等知识的学习,但是一直没有时间。这里重新行动起来,从项目搭建到完成前前后后用了两个月时间,平常时间比较少,基本上都是只能利用零碎的

    2024年02月09日
    浏览(54)
  • ArcGIS Enterprise + ArcGIS Pro 常用服务类型发布

    门户连接 首先Pro需要先连接portal 添加portal门户地址,注意只到WA一级地址,并登录: 登录完成后,右键,设置为活动门户: 关联数据文件夹: 拖拽数据到地图视图窗口加载数据: 右键图层发布web layer: 这里为发布简述,采用复制发布的形式,选择Map Image 形式: 然后点击

    2024年02月10日
    浏览(41)
  • 如何将ArcGIS工程文件迁移到ArcGIS Pro内

    当你刚接触ArcGIS Pro的时候,尝试新建一个工程文件会发现工程文件的后缀已经改变,那么以前在ArcGIS内辛苦制作的工程文件是否就不能在ArcGIS Pro内使用了,答案是否定的,对此Esri也给出了解决方案,这里为大家介绍一下迁移的方法。 在菜单栏上选择插入,点击导入地图,如

    2024年01月23日
    浏览(52)
  • Arcgis Pro地理配准

    目录 一、目的 二、配准 1、找到配准工具 2、添加控制点 3、选择控制点 4、添加更多控制点 5、配准完成、保存 三、附录 1、查看控制点或删除控制点 2、效果不好怎么办 下面我们将两张地图进行配准,其中一张有地理位置,而另外一张没有地理位置。 1、找到配准工具 首先

    2024年04月12日
    浏览(36)
  • ArcGIS Pro用户界面

    目录 1 功能区 1.1 快速访问工具栏 1.2 自定义快速访问工具栏 1.3  自定义功能区选项  1.3.1 添加组和命令  1.3.2 添加新选项卡 2 视图 3  用户界面排列 ​编辑 4  窗格 4.1  内容窗格  4.2 目录窗格 4.3 目录视图(类似ArcCatalog) 4.4 浏览对话框(以添加数据为例)   组成 描述 ①

    2024年02月07日
    浏览(43)
  • ArcGIS Pro 如何新建布局

    你是否已经习惯了在ArcGIS中数据视图和布局视图之间来回切换,到了ArcGIS Pro中却找不到二者之间切换的按钮,即使新建布局后却发现地图怎么却是一片空白。 这一切的一切都是因为ArcGIS Pro的功能框架完全不同,这里为大家介绍一下在ArcGIS Pro怎么新建布局,希望能对你有所帮

    2024年01月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包