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

Avalonia MVVM

Avalonia MVVM 框架

1.视图模型

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;namespace AvaloniaMVVMDemo.ViewModels
{public partial class MainViewModel:ObservableObject{[ObservableProperty]private string _title = "Avalonia MVVM Demo"; //用标记属性[ObservableProperty],默认生成对应的属性,如Title[ObservableProperty]private string _inputText = string.Empty;[ObservableProperty]private ObservableCollection<string> _items = new ObservableCollection<string>();[RelayCommand]private void AddItem(){if (!string.IsNullOrEmpty(InputText))  //这个InputText 即为框架默认生成的属性{Items.Add(InputText);}}[RelayCommand]private void RemoveItem(string item)  //命令属性标记,则该方法为一个命令{if (item != null){Items.Remove(item);}}public MainViewModel(){Items.Add("示例项目1");Items.Add("示例项目2");}}
}

2.AXAML 部分

<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vm="using:AvaloniaMVVMDemo.ViewModels"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="500"x:Class="AvaloniaMVVMDemo.Views.MainWindow"x:DataType="vm:MainViewModel"Icon="/Assets/avalonia-logo.ico"Width="400" Height="500"Title="AvaloniaMVVMDemo"><Grid RowDefinitions="Auto,*,Auto" Margin="10"><!--输入区域--><StackPanel Grid.Row="0" Orientation="Horizontal" Spacing="5"><TextBox Text="{Binding InputText,Mode=TwoWay}" Watermark="输入新项目..."   <!--默认支持Watermark-->Width="200"/><Button Content="添加"Command="{Binding AddItemCommand}"    <!--正常绑定命令-->IsEnabled="{Binding InputText,Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/><!--列表区域--><ListBox Grid.Row="1"ItemsSource="{Binding Items}"Margin="0 10 0 0"><ListBox.ItemTemplate><DataTemplate><Grid ColumnDefinitions="*,Auto"><TextBlock Text="{Binding}" VerticalAlignment="Center" /><Button Grid.Column="1"Content="删除"  <!--由于当前绑定数据非MainViewModel 而命令需要使用视图模型的命令,因此通过$parent[Window].DataContext.RemoveItemCommand间接绑定到了命令-->Command="{Binding $parent[Window].DataContext.RemoveItemCommand }"CommandParameter="{Binding}"Margin="5 0 0 0"/></Grid></DataTemplate></ListBox.ItemTemplate></ListBox><!--状态区域--><TextBlock Grid.Row="2"  <!--这里的绑定使用数据集属性,而且指定了StringFormat 格式化数据-->Text="{Binding Items.Count,StringFormat='项目数量:{0}'}"Margin="0 10 0 0"/></StackPanel></Grid>
</Window>
http://www.jsqmd.com/news/334323/

相关文章:

  • 基于Kubernetes的AI多租户系统部署实战
  • LazyLLM教程 | 第4讲:RAG项目工程化入门:从脚本走向模块化与可维护性
  • AI Agent规划能力实战:点餐支付售后多任务协同实现,面试官看了都点头!建议收藏
  • 毕业论文盲审在即,现在还没动笔?
  • LLM教程 | 第2讲:10分钟上手一个最小可用RAG系统
  • VLA Notes - kirin
  • 【笔记】【图】
  • 通过 C# 设置 Word 文档背景颜色、背景图
  • 通用 Agent 执行沙箱环境技术方案调研报告
  • LLM教程 | 第1讲:RAG原理解读:让检索增强生成不再是黑盒
  • 2026年圆形、防水与密封连接器厂家三维测评与选型指南 - 品致汇
  • 小白从零开始勇闯人工智能:计算机视觉初级篇(OpenCV补充(1))
  • 【SRC】抓包环境搭建与并发漏洞实战全解
  • 雷鸟创新背着10亿闯三关
  • Java开发者必看!40篇系统教程+完整代码,从入门到精通掌握AI应用开发(建议收藏)
  • PingApi接口开发平台4.0发布
  • 提示工程架构师:用Git思维做提示版控,效率直接拉满
  • 物流无人机承重模块详解
  • 揭秘ACPs/AIP的中心化架构:不是落后而是高效,附智能体跨域协作三种实现方式 | 技术必藏
  • Active Directory 端口列表
  • 玩手机看手机打电话检测数据集VOC+YOLO格式2332张2类别
  • Remote JVM Debug+cpolar 让 Java 远程调试超丝滑
  • 接口开发平台——接口编排使用
  • 【大学院-筆記試験練習:线性代数和数据结构(22)】
  • 大数据A_B测试流量分配策略:分层、互斥、动态分配实战指南
  • springboot快递公司物流信息管理系统设计与实现-开题报告-开题报告
  • Python多线程与多进程:性能对比与场景选择
  • 速看!提示工程架构师的并行计算框架最佳实践
  • <span class=“js_title_inner“>山大学者这篇文章,你们要看!它是机器学习方法临床应用2026年最集大成者</span>
  • 【程序员必看】5款国产AI大模型全方位对比:DeepSeek、豆包、Kimi、智谱清言和通义千问,谁才是你的最佳选择?(收藏版)