Socket 简易静态服务器 WPF MVVM模式(三)
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,10,FileUrl); run = false; input = false; } } }
不过也有一点需要注意的 就是跨线程更新UI 这个地方MVVM报错的比较多
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现