ViewModels类

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

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

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows;
using System.Windows.Input;
using 简易静态服务器.Code;
using 简易静态服务器.Commands;
using 简易静态服务器.Models; namespace 简易静态服务器.ViewModels
{
public class MainViewModels : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnChanged(PropertyChangedEventArgs args) => PropertyChanged?.Invoke(this, args);
private ObservableCollection<MainClass> mainclass=new ObservableCollection<MainClass>();
public ObservableCollection<MainClass> MainClass
{
get { return mainclass; }
set
{
mainclass = value;
OnChanged(new PropertyChangedEventArgs("MainClass"));
}
}
private string prot;
private string fileurl;
private bool input;
private bool run;
private string ip;
public bool Run { get => run; set { run = value; OnChanged(new PropertyChangedEventArgs("Run")); } }
public bool Input { get => input; set { input = value;OnChanged(new PropertyChangedEventArgs("Input")); } }
public string IP { get => ip; set { ip = value;OnChanged(new PropertyChangedEventArgs("IP")); } }
public string Prot { get { return prot; } set { prot = value; OnChanged(new PropertyChangedEventArgs("Prot")); } }
public string FileUrl { get { return fileurl; } set { fileurl = value; OnChanged(new PropertyChangedEventArgs("FileUrl")); } } private Server server; private IPAddress IPadd;
private int IPprot;
public MainViewModels()
{
server = new Server();
server.OnStocketStringChange += Server_OnStocketStringChange;
MainClass = new ObservableCollection<MainClass>();
run = true;
input = true;
} public ICommand StatrCommand
{
get { return new MainCommand(Exectue, CanExectue); }
}
public ICommand StopCommand
{
get { return new MainCommand(Exectue2, CanExectue2); }
} private bool CanExectue2(object arg)
{
if (!run)
{
return true;
}
return false;
} private void Exectue2()
{
server.Stop();
run = true;
input = true;
} private void Server_OnStocketStringChange(string sender)
{
Application.Current.Dispatcher.Invoke(() => { MainClass.Add(new Models.MainClass() { StocketSting = sender }); });
} private bool CanExectue(object obj)
{
if (run)
{
if (IPAddress.TryParse(IP, out IPadd) && int.TryParse(Prot, out IPprot) && System.IO.Directory.Exists(FileUrl))
return true;
else
return false;
}
return false; } private void Exectue()
{
server.Start(IPadd,IPprot,,FileUrl);
run = false;
input = false;
}
}
}

不过也有一点需要注意的 就是跨线程更新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. 1088 Rational Arithmetic

    题意: 给出两个分式(a1/b1 a2/b2),分子.分母的范围为int型,且确保分母不为0.计算两个分数的加减乘除,结果化为最简的形式,即"k a/b",其中若除数为0的话,输出 ...

  2. python3+ros api

    官方文档:https://wiki.mikrotik.com/wiki/Manual:API_Python3 # !/usr/bin/env python# -*- coding:utf-8 -*-# ...

  3. Thinkphp或查询使用

    if ($_GET['machine_type_id']) { $machine_type_id = trim($_GET['machine_type_id']); $where['machine_t ...

  4. PCB打样前的注意事项

    0.画板前,在制定规则的时候,一定要查看生产厂家的生产工艺.  (厂家能打几层板.最小间距.焊盘最小和最大尺寸等等) 1.查看焊盘的孔径是否合适.  (检查能否插进去) 2.仔细检查购买的三端器件的引 ...

  5. java中抽象类跟接口的区别

    额,好吧,本来是打算转载些神马的,但是搜资料的过程中发现了一个专注与java的人,那就关注啦,以后多进他blog学习学习:http://www.cnblogs.com/chenssy/p/337670 ...

  6. 使用airodump-ng扫描网络

    执行命令 root@sch01ar:~# airodump-ng wlan0mon 参数介绍: BSSID:表示无线AP的Mac地址 PWR:网卡报告的信号水平 Beacons:无线AP发出的通告编号 ...

  7. Flask之部署

    5.3 部署 当我们执行下面的hello.py时,使用的flask自带的服务器,完成了web服务的启动.在生产环境中,flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容 ...

  8. 转&nbsp;-ALSA&nbsp;配置

    原文地址:-ALSA 配置">转 -ALSA 配置作者:超级大苹果 alsa 音频路径的问题: 在sound/soc/codecs目录中有很多音频codec的codec驱动,我使用的是 ...

  9. codeforce 461DIV2 F题

    题意 题目给出n,k,要求找出一个1到n的子集,(a,b)的对数等于k:(a,b)满足a<b且b%a==0: 分析 还记不记得求素数的时候的欧拉筛!对就那样!如果把每个数字看作一个点的话,可以通 ...

  10. PHP Liunx 服务安全防范方案

    PHP100平均每个月都会有入侵或者攻击,我们做了很多工作,当然很多高手们还是可以入侵,这我们并不感到奇怪,因为我们相信天外有天,人外有人,虽然 我们现在服务器还是稳定(高手们不要来喷了),我们把我们 ...