在C# WPF中按照MVVM框架结构进行拆分:
前几天在Github上找到了一个免费的ChatGPT的API接口,此API服务器是在国内的,所有访问速度比之前翻墙访问要快不少,最主要是它可以免费使用GPT3.5(GPT4是收费的)。
https://github.com/chatanywhere/gpt_api_free
handycontrol中有个Imageviewer控件已经完成了这个功能,可以直接调用
handycontrol应该是有个winform的版本,可以适配framework 4使用,可以直接嵌入到aardio中。
<Window x:Class="WPFImageViewer.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http:/回复#7 @鸿湖重工业株式会社 :
因为scottplot、ZedGraph、oxyplot这些都是C#的库,在C#中用Nuget引入后会有比较详细的代码提示,所以一般直接在VS中就能看到应该调用什么函数实现什么功能,但在aardio中是无法直接看到的,一个一个试错的效率实在是太低了。
比较好的做法是现在VS中学会如何使用,然后再在aardio进行同样逻辑的调用,这样可以少走不少弯路。
根据上述模板开发
HandyControl 还是比较符合现代扁平化设计的风格
定制了一个项目模板,包含WPF + CommunityToolkit.Mvvm + Behaviors + PubSub + HandyControls
都已经配置好了,直接导入VS模板即可
回复#1 @admin :
WPF其实和WinForm非常不一样了,尤其是用了MVVM模式以后要做到完全的前后端分离,不通过消息的订阅和发布几乎就不可能在界面之间交互了。
其实
C#的WPF开发中经常会遇到需要在不同窗口或者界面间传递消息,如果要严格遵循Model-View-ViewModel前后台分离的原则来开发的话,数据的跨界面传输就会比较麻烦,尤其涉及到多个不同界面间的相互交互。
PubSub库的订阅和发布可以比较方便的解决这个问题。
1. Model: 消息模型
using CommunityToolkit.Mvvm.ComponentModel; namespace WpfPubSubDemo { public partial class M还可以做背景变换的动画,把变化速度调慢时候当桌面时缓慢变化。
WPF应该有更优雅的动画制作语句,不过我只叠加了一张图片,然后调了调透明度
private void RunAnimation() { Application.Current.Dispatcher.Invo旁边可以加个切换城市列表加载更多人物立绘
定制化RadioButton
<!--城市列表--> <ListBox x:Name="cityListBox" Grid.Row="0" Grid.ColumnC#的Linq实现大数据(千万级别)的筛选性能表现还是很不错的。
WPF界面:
<Window x:Class="WpfDemo01.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://sch之前演示了通过点击按钮实现页面跳转,其实Xamarin支持TabbedPage实现各子页面的调度。
修改MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?> <TabbedPage xmlns="http://xamarin.com/schemas/2014/f继续分享通过Xamarin开发Android应用的案例:调用手机摄像头拍照
新建一个内容页Page3并通过路由注册,方法与之前相同,略过
在内容页Page3.xaml上放一个Image和一个Button
<?xml version="1.0" encoding="utf-8" ?> <数据绑定也可以用CollectionView展示,比如这样
Page2.xaml.cs
接上一篇,继续
回复#8 @鸿湖重工业株式会社 :
这个还要看你调用的dll,有些比如申明了允许外部调用,有些可能是私有的,还有些可能是受保护的,或者是只读或者只写的属性。
例如,上面的这个类
public class JiJin { public string _Code { get; private set; } public string _Name { get; private set; }换了个异步写法,调用天天基金的api接口并解析json列表
var myjj = new JiJin("002910"); myjj.Adjustment = 0.9; myjj.GetStocks(); myjj.Calculate(); myjj.Dump(); public class JiJin { public string _Code { get; private set; } public string _Name { get; private set; } publi改进了一下,直接输入基金代码可以自动查询持仓并计算净值。
通过解析天天基金的网页进行计算。
var jj = new JiJin("012414"); jj.GetChiCang(); jj.Calculate(); $"{DateTime.Now.ToShortDateString()} 基金{jj.Name}的净值估计{jj.TotalChange*100}%".Dump(); class JiJin { public string Name { get; private set; }回复#7 @admin :
其实委托用熟了还是很方便的,常规的步骤:
创建委托方法 -> 订阅功能
创建委托(哪里使用,哪里创建)
使用委托 -> 发布功能
把委托和委托方法进行关联
回复#13 @鸿湖重工业株式会社 :
好吧,你不说我都没注意