ViewModels类

这个类其实就是个大杂烩,什么都可以用

这个类没有什么东西,最多的就是写一下xaml页面的逻辑控制,开启关闭监听

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.ComponentModel;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Web.Script.Serialization;
  11. using System.Windows;
  12. using System.Windows.Input;
  13. using 简易静态服务器.Code;
  14. using 简易静态服务器.Commands;
  15. using 简易静态服务器.Models;
  16.  
  17. namespace 简易静态服务器.ViewModels
  18. {
  19. public class MainViewModels : INotifyPropertyChanged
  20. {
  21. public event PropertyChangedEventHandler PropertyChanged;
  22. protected void OnChanged(PropertyChangedEventArgs args) => PropertyChanged?.Invoke(this, args);
  23. private ObservableCollection<MainClass> mainclass=new ObservableCollection<MainClass>();
  24. public ObservableCollection<MainClass> MainClass
  25. {
  26. get { return mainclass; }
  27. set
  28. {
  29. mainclass = value;
  30. OnChanged(new PropertyChangedEventArgs("MainClass"));
  31. }
  32. }
  33. private string prot;
  34. private string fileurl;
  35. private bool input;
  36. private bool run;
  37. private string ip;
  38. public bool Run { get => run; set { run = value; OnChanged(new PropertyChangedEventArgs("Run")); } }
  39. public bool Input { get => input; set { input = value;OnChanged(new PropertyChangedEventArgs("Input")); } }
  40. public string IP { get => ip; set { ip = value;OnChanged(new PropertyChangedEventArgs("IP")); } }
  41. public string Prot { get { return prot; } set { prot = value; OnChanged(new PropertyChangedEventArgs("Prot")); } }
  42. public string FileUrl { get { return fileurl; } set { fileurl = value; OnChanged(new PropertyChangedEventArgs("FileUrl")); } }
  43.  
  44. private Server server;
  45.  
  46. private IPAddress IPadd;
  47. private int IPprot;
  48. public MainViewModels()
  49. {
  50. server = new Server();
  51. server.OnStocketStringChange += Server_OnStocketStringChange;
  52. MainClass = new ObservableCollection<MainClass>();
  53. run = true;
  54. input = true;
  55. }
  56.  
  57. public ICommand StatrCommand
  58. {
  59. get { return new MainCommand(Exectue, CanExectue); }
  60. }
  61. public ICommand StopCommand
  62. {
  63. get { return new MainCommand(Exectue2, CanExectue2); }
  64. }
  65.  
  66. private bool CanExectue2(object arg)
  67. {
  68. if (!run)
  69. {
  70. return true;
  71. }
  72. return false;
  73. }
  74.  
  75. private void Exectue2()
  76. {
  77. server.Stop();
  78. run = true;
  79. input = true;
  80. }
  81.  
  82. private void Server_OnStocketStringChange(string sender)
  83. {
  84. Application.Current.Dispatcher.Invoke(() => { MainClass.Add(new Models.MainClass() { StocketSting = sender }); });
  85. }
  86.  
  87. private bool CanExectue(object obj)
  88. {
  89. if (run)
  90. {
  91. if (IPAddress.TryParse(IP, out IPadd) && int.TryParse(Prot, out IPprot) && System.IO.Directory.Exists(FileUrl))
  92. return true;
  93. else
  94. return false;
  95. }
  96. return false;
  97.  
  98. }
  99.  
  100. private void Exectue()
  101. {
  102. server.Start(IPadd,IPprot,,FileUrl);
  103. run = false;
  104. input = false;
  105. }
  106. }
  107. }

不过也有一点需要注意的 就是跨线程更新UI 这个地方MVVM报错的比较多

Socket 简易静态服务器 WPF MVVM模式(三)的更多相关文章

  1. Socket 简易静态服务器 WPF MVVM模式(四)

    最重要的一个类Socket类 using System; using System.Collections.Generic; using System.IO; using System.Linq; u ...

  2. Socket 简易静态服务器 WPF MVVM模式(一)

    整体代码下载 主要实现功能: Socket的简单应用 可修改IP和端口 显示来访信息 界面设计: 界面采用MVVM设计,很简陋. 前台的主要目的是 输入IP地址 输入端口 输入文件目录 开启监听和停止 ...

  3. Socket 简易静态服务器 WPF MVVM模式(二)

    command类 标准来说,command会有三种模式,委托命令 准备命令 附加命令 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand ...

  4. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍

    WPF自学入门(十一)WPF MVVM模式Command命令   在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式 ...

  5. WPF MVVM模式的一些理解

    /*本文转自 http://www.cnblogs.com/sirkevin/archive/2012/11/28/2793471.html */ 使用WPF+Mvvm开发一年多,期间由于对Mvvm模 ...

  6. wpf mvvm模式下CommandParameter传递多参

    原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...

  7. WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制

    原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到 ...

  8. WPF MVVM实例三

    在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...

  9. WPF MVVM模式下的无阻塞刷新探讨

    很多时候我们需要做一个工作,在一个方法体里面,读取大数据绑定到UI界面,由于长时间的读取,读取独占了线程域,导致界面一直处于假死状态.例如,当应用程序开始读取Web资源时,读取的时效是由网络链路的速度 ...

随机推荐

  1. 安装ElasticSearch客户端Kibana

    安装Kibana Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作. wget https://artifacts ...

  2. php去除html

    代码如下 //清除html function clearhtml($str){ $str = trim($str); $str = strip_tags($str,""); $st ...

  3. MOS管防止电源反接的原理

    [导读]  一般可以使用在电源的正极串入一个二极管解决,不过,由于二极管有压降,会给电路造成不必要的损耗,尤其是电池供电场合,本来电池电压就3.7V,你就用二极管降了0.6V,使得电池使用时间大减. ...

  4. app端内容播放,web端的玩具,app通过websocket远程遥控玩具播放内容,玩具管理页面

    一.app端内容播放 下载代码 https://github.com/987334176/Intelligent_toy/archive/v1.0.zip 注意:由于涉及到版权问题,此附件没有图片和音 ...

  5. 微信小程序wxss设置样式

    微信小程序wxss设置样式 对于以前搞客户端开发的来说,有着客户端的逻辑,就是不知道怎么设置样式,把对应的控件显示出来 一.wxml 界面结构wxmL比较容易理解,主要是由八大类基础组件构成: 一.视 ...

  6. String类的内存分配

    首先说一下Java内存分配.物理的内存是线性结构,并不存在拥有不同功能的不同区域,编译器(或者JVM)为了更高效地处理数据,会用不同的算法把内存分为各种区域,不同的区域拥有各自的特性,Java中,内存 ...

  7. OpenGL ES & SDL(转载)

    原帖:http://qqwt.blog.sohu.com/91060365.html 这个学期在学习嵌入式,由于老师的高要求.所以我们几个水手必须要完成一个项目,名字就叫OpenGL ES & ...

  8. android 4.0.4系统下实现apk的静默安装和启动

    转 android 4.0.4系统下实现apk的静默安装和启动 分类: Android 2013-02-14 14:13 1762人阅读 评论(10) 收藏 举报 最近在android 4.0.4系统 ...

  9. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  10. java Web jsp嵌入代码的三种方式

    1,表达式标签  <%= 2+3%> 唯一有显示功能的标签 作用: 计算表达式的返回值 将表达式的返回值显示到网页中. 注意: 表达式中不能有分号 2,普通脚本标签  <% %> ...