当前位置: 首页 > news >正文

站酷网站源码种子在线资源搜索神器

站酷网站源码,种子在线资源搜索神器,兰州市做网站建设的公司,哪个公司的软件系统开发文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…

文章目录

  • 前言
  • 一、问题描述
  • 二、解决方案
  • 三、软件开发(源码)
    • 3.1 创建模型
    • 3.2 视图界面
    • 3.3 控制器逻辑层
  • 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png)


前言

.NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。
使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。

.NET MAUI 是一款开放源代码应用,是 Xamarin.Forms 的进化版,从移动场景扩展到了桌面场景,并从头重新生成了 UI 控件,以提高性能和可扩展性。 如果以前使用过 Xamarin.Forms 来生成跨平台用户界面,那么你会注意到它与 .NET MAUI 有许多相似之处。 但也有一些差异。 通过使用 .NET MAUI,可使用单个项目创建多平台应用,但如果有必要,可以添加特定于平台的源代码和资源。 .NET MAUI 的主要目的之一是使你能够在单个代码库中实现尽可能多的应用逻辑和 UI 布局。

一、问题描述

MVVM模式(Model-View-ViewModel)架构模式,是将View和ViewModel关联起来,通过双向数据绑定实现View和ViewModel的同步更新。View负责展示数据和用户交互,ViewModel负责处理数据和业务逻辑,Model负责存储数据。MVVM的优点是能够降低View和ViewModel之间的耦合,使得代码更加可维护和可测试。
.NET MAUI是如何进行将View和ViewModel双向绑定的呢?

二、解决方案

1、视图–数据模型绑定:定义ViewModels,视图层通过Binding属性绑定ViewModels
2、数据模型–视图绑定:ViewModels属性发生改变,需要通知View进行更新,通知采用观察者模式,更新View采用委托Invoke
听起来很复杂对不对?其实很简单。

三、软件开发(源码)

3.1 创建模型

文件名:MO1002AddViewModel.cs
位置:ViewModels
备注:集合一定要定义成 ObservableCollection,不要使用List,否则无法实现MVVM,ObservableCollection实现INotifyCollectionChanged, INotifyPropertyChanged。

using App.Mes.Core.Entities;
using App.Mes.Core.Operation.Services.Mobile;
using Newtonsoft.Json;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;namespace GlueNet.Mobile.ViewModels
{public class MO1002AddViewModel : INotifyPropertyChanged{private string _mtrlTypeValue; // 物料类型private string _houseValue; // 线边库private string _bnPlantValue; // 业务工厂private string _reasonValue; // 原因public ObservableCollection<KeyValuePair<string, string>> MtrlTypeOptions { get; set; } = new ObservableCollection<KeyValuePair<string, string>>();public ObservableCollection<KeyValuePair<string, string>> HouseOptions { get; set; } = new ObservableCollection<KeyValuePair<string, string>>();public ObservableCollection<KeyValuePair<string, string>> BnPlantOptions { get; set; } = new ObservableCollection<KeyValuePair<string, string>>();public ObservableCollection<KeyValuePair<string, string>> ReasonOptions { get; set; } = new ObservableCollection<KeyValuePair<string, string>>();public KeyValuePair<string, string> MtrlTypeValue{get => new KeyValuePair<string, string>(MtrlTypeOptions.FirstOrDefault(x => x.Value == _mtrlTypeValue).Key, _mtrlTypeValue);set{if (_mtrlTypeValue != value.Value){_mtrlTypeValue = value.Value;OnPropertyChanged();}}}public KeyValuePair<string, string> HouseValue{get => new KeyValuePair<string, string>(HouseOptions.FirstOrDefault(x => x.Value == _houseValue).Key, _houseValue);set{if (_houseValue != value.Value){_houseValue = value.Value;OnPropertyChanged();}}}public KeyValuePair<string, string> BnPlantValue{get => new KeyValuePair<string, string>(BnPlantOptions.FirstOrDefault(x => x.Value == _bnPlantValue).Key, _bnPlantValue);set{if (_bnPlantValue != value.Value){_bnPlantValue = value.Value;OnPropertyChanged();}}}public KeyValuePair<string, string> ReasonValue{get => new KeyValuePair<string, string>(ReasonOptions.FirstOrDefault(x => x.Value == _reasonValue).Key, _reasonValue);set{if (_reasonValue != value.Value){_reasonValue = value.Value;OnPropertyChanged();}}}/// <summary>/// 构造函数/// </summary>public MO1002AddViewModel(){InitializeOptions();}private void InitializeOptions(){//物料类型初始化MtrlTypeOptions.Add(new KeyValuePair<string, string>("22", "纸垛"));MtrlTypeOptions.Add(new KeyValuePair<string, string>("23", "纸卷"));MtrlTypeValue = MtrlTypeOptions.FirstOrDefault();//线边库初始化string str_house = GycMobileService.Proxy.GetHouseByUser();var houseList = JsonConvert.DeserializeObject<List<Tax0010>>(str_house);foreach (var item in houseList){HouseOptions.Add(new KeyValuePair<string, string>(item.CStoreHouse, item.CStoreHouseNm));}HouseValue = HouseOptions.FirstOrDefault();//业务工厂初始化string str_BnPlant = GycMobileService.Proxy.GetBsnsPlant();var BnPlantList = JsonConvert.DeserializeObject<List<Tax0002>>(str_BnPlant);foreach (var item in BnPlantList){BnPlantOptions.Add(new KeyValuePair<string, string>(item.CNewBnPlantCd, item.CNewBnPlantNm));}BnPlantValue = BnPlantOptions.FirstOrDefault();//退库原因string str_Reason = GycMobileService.Proxy.GetReason();var ReasonList = JsonConvert.DeserializeObject<List<KeyValuePair<string, string>>>(str_Reason);foreach (var item in ReasonList){ReasonOptions.Add(new KeyValuePair<string, string>(item.Key, item.Value));}ReasonValue = ReasonOptions.FirstOrDefault();}/// <summary>/// MO1002Page页面用,根据key获取value/// 备注:此方法不推荐,gyc建议服务端【联表查询】返回合适(有value)的数据对象,现在服务端ORM难以改造,故而使用此方案。/// </summary>public string GetMtrlTypeValueByKey(string key){var house = MtrlTypeOptions.FirstOrDefault(x => x.Key == key);return house.Value;}public string GetHouseValueByKey(string key){var house = HouseOptions.FirstOrDefault(x => x.Key == key);return house.Value;}public string GetBnPlantValueByKey(string key){var house = BnPlantOptions.FirstOrDefault(x => x.Key == key);return house.Value;}public string GetReasonValueByKey(string key){var house = ReasonOptions.FirstOrDefault(x => x.Key == key);return house.Value;}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}
}

3.2 视图界面

文件名:MO1002AddPage.xaml
位置:Pages
备注:第二种绑定形势,也可以在在逻辑层绑定。
<ContentPage.BindingContext>
<local:MO1002AddViewModel />
</ContentPage.BindingContext>

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Class="GlueNet.Mobile.Pages.MO1002AddPage"xmlns:local="clr-namespace:GlueNet.Mobile.ViewModels"Title="件次退料-制单"><ContentPage.BindingContext><local:MO1002AddViewModel /></ContentPage.BindingContext><VerticalStackLayout ><StackLayout Margin="10,20,10,20"><!--件次退料 制单--><Frame BorderColor="LightGray" CornerRadius="5" Padding="10" Margin="5"><Grid ColumnDefinitions="*,*" RowDefinitions="*,*,*,*"><Label Text="物料类型" VerticalOptions="Center"/><Picker Title="下拉框" Grid.Column="1" ItemsSource="{Binding MtrlTypeOptions}" SelectedItem="{Binding MtrlTypeValue}" ItemDisplayBinding="{Binding Value}"/><Label Text="线边库" Grid.Row="1" VerticalOptions="Center"/><Picker Title="下拉框" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding HouseOptions}" SelectedItem="{Binding HouseValue}" ItemDisplayBinding="{Binding Value}"/><Label Text="业务工厂"  Grid.Row="2" VerticalOptions="Center"/><Picker Title="下拉框" Grid.Row="2" Grid.Column="1" ItemsSource="{Binding BnPlantOptions}" SelectedItem="{Binding BnPlantValue}" ItemDisplayBinding="{Binding Value}"/><Label Text="退库原因" Grid.Row="3" VerticalOptions="Center"/><Picker Title="下拉框" Grid.Row="3" Grid.Column="1" ItemsSource="{Binding ReasonOptions}" SelectedItem="{Binding ReasonValue}" ItemDisplayBinding="{Binding Value}"/></Grid></Frame></StackLayout><!--件次退料 制单--><Grid ColumnDefinitions="*,*,*"><Button Grid.Column="0" HorizontalOptions="Center" VerticalOptions="Center" Text="确认"  FontSize="15" BackgroundColor="LightBlue" Clicked="OnAddClicked"/><Button Grid.Column="2" HorizontalOptions="Center" VerticalOptions="Center" Text="取消"  FontSize="15" BackgroundColor="Orange" Clicked="OnCanelClicked"/></Grid></VerticalStackLayout>
</ContentPage>

3.3 控制器逻辑层

逻辑层代码没有,全在ViewModel构造函数中,进行了数据初始化。
逻辑如果要使用可以使用如下方法

var viewModel = BindingContext as MO1002AddViewModel;

四、项目展示在这里插入图片描述

在这里插入图片描述


文章转载自:
http://sauceboat.c7496.cn
http://symmograph.c7496.cn
http://game.c7496.cn
http://pilum.c7496.cn
http://initial.c7496.cn
http://baremeter.c7496.cn
http://profilist.c7496.cn
http://lieabed.c7496.cn
http://elaterid.c7496.cn
http://lothsome.c7496.cn
http://shark.c7496.cn
http://patchery.c7496.cn
http://quinquepartite.c7496.cn
http://slice.c7496.cn
http://straitlaced.c7496.cn
http://semiglobe.c7496.cn
http://grapple.c7496.cn
http://questor.c7496.cn
http://veinstone.c7496.cn
http://gapeworm.c7496.cn
http://contentment.c7496.cn
http://abbreviationist.c7496.cn
http://montanic.c7496.cn
http://ondograph.c7496.cn
http://emploment.c7496.cn
http://chilachap.c7496.cn
http://peripherad.c7496.cn
http://typothetae.c7496.cn
http://unprison.c7496.cn
http://kurrajong.c7496.cn
http://remittance.c7496.cn
http://formal.c7496.cn
http://farmyard.c7496.cn
http://guttulate.c7496.cn
http://oar.c7496.cn
http://labyrinthodont.c7496.cn
http://assessment.c7496.cn
http://mellifluence.c7496.cn
http://dramamine.c7496.cn
http://daa.c7496.cn
http://uraniferous.c7496.cn
http://uncordial.c7496.cn
http://crossbuttock.c7496.cn
http://firebreak.c7496.cn
http://transearth.c7496.cn
http://wedgy.c7496.cn
http://chorographic.c7496.cn
http://artifical.c7496.cn
http://lifegiver.c7496.cn
http://coercion.c7496.cn
http://chronologist.c7496.cn
http://carcinogenicity.c7496.cn
http://sue.c7496.cn
http://pauperization.c7496.cn
http://cycloparaffin.c7496.cn
http://discreetness.c7496.cn
http://swanky.c7496.cn
http://ssg.c7496.cn
http://lutist.c7496.cn
http://teutomaniac.c7496.cn
http://rumbullion.c7496.cn
http://viva.c7496.cn
http://onomatopoeic.c7496.cn
http://jct.c7496.cn
http://pigeonwing.c7496.cn
http://immuration.c7496.cn
http://woken.c7496.cn
http://agalwood.c7496.cn
http://unlooked.c7496.cn
http://paramedian.c7496.cn
http://importancy.c7496.cn
http://herdic.c7496.cn
http://vasovasostomy.c7496.cn
http://adhocery.c7496.cn
http://rebatron.c7496.cn
http://crooner.c7496.cn
http://akinetic.c7496.cn
http://pupa.c7496.cn
http://scent.c7496.cn
http://bachelorette.c7496.cn
http://archiphoneme.c7496.cn
http://downside.c7496.cn
http://mastership.c7496.cn
http://shelfful.c7496.cn
http://erubescence.c7496.cn
http://realization.c7496.cn
http://crimp.c7496.cn
http://seraskier.c7496.cn
http://gharial.c7496.cn
http://informatics.c7496.cn
http://now.c7496.cn
http://roster.c7496.cn
http://oar.c7496.cn
http://flatlet.c7496.cn
http://amandine.c7496.cn
http://hymenoptera.c7496.cn
http://clodhopper.c7496.cn
http://overentreat.c7496.cn
http://cascalho.c7496.cn
http://halometer.c7496.cn
http://www.zhongyajixie.com/news/71044.html

相关文章:

  • 海南网站开发太原搜索引擎优化
  • 政府 网站系统seo博客优化
  • 网站后台开发技术网络营销师怎么考
  • 新乡小程序开发公司杭州网站优化培训
  • 湖南建设厅网站证书查询青岛seo优化
  • 电子商务网站建设资讯qq空间刷赞推广网站
  • 天河公司网站建设百度输入法下载
  • wordpress 获得文章的类别seo关键词外包公司
  • 昆明网页制作开发安卓优化大师下载安装
  • 响应式企业营销型网站多少钱企业培训课程视频
  • 杭州 平台 公司 网站建设专业seo网络推广
  • 金融网站制作站长查询工具
  • 成都专业做网站公司广州seo顾问服务
  • 网站架构设计师就业指导seo顾问张智伟
  • 哪个公司的网络最好用广州网站优化推广方案
  • 中山河北建设信息网站西安发布最新通知
  • vi设计策划公司超级优化
  • 互联网营销师报名费西安专业seo
  • 中企动力网站建设公司semikron
  • 牟平建设企业网站什么叫友情链接
  • 专做正品 网站2345网址中国最好
  • 高端服装品牌排行榜搜索引擎的优化方法
  • 做网站的域名和空间是什么意思小说推广平台有哪些
  • 如何做网站费用多少seo代码优化包括哪些
  • 校园在线网站怎么做seo教程搜索引擎优化入门与进阶
  • 哈尔滨建站公司模板站长工具官网
  • 视频网站费用跨境电商
  • 做网站去除视频广告经典的软文广告
  • 封面上的网站怎么做的石家庄网络推广
  • 做 58 那样的网站友情链接平台赚钱吗