Avalonia笔记5-数据绑定

学习笔记:

1. 使用{Binding}标记拓展在XAML中进行绑定。通过绑定,所有数据上下文的变化都将自动更新到控件上。

<TextBlock Text="{Binding Name}"/>

 2. 绑定模式

可以通过指定{Binding}Mode来修改绑定的行为:

OneWay

源的变化自动传播到目标

TwoWay

源和目标的变化互相传播

OneTime

源的初始值会应用到目标,但后续的变化会被无视

OneWayToSource

目标的变化自动传播到源

Default

依据属性而定

3.绑定变化通知

private int _selectedParityIndex;
public int SelectParityIndex
{get => _selectedParityIndex;set => this.RaiseAndSetIfChanged(ref _selectedParityIndex, value);
}

4。与控件绑定

<TextBox Name="tb1"><!-- 绑定到命名为“tb1”控件的Text属性 -->
<TextBlock Text="{Binding #tb1.Text}"/>

5. 绑定到父级

<Border Tag="Hello Avalonia!"><TextBlock Text="{Binding $parent.Tag}"/>
</Border><!-- 绑定到祖先级 -->
<Border Tag="Hello Avalonia!"><Border><TextBlock Text="{Binding $parent[1].Tag}"/></Border>
</Border>
<!-- 按类型绑定到祖先 -->
<Border Tag="Hello Avalonia!"><Decorator><TextBlock Text="{Binding $parent[Border].Tag}"/></Decorator>
</Border>

6. 绑定到转换器

<Window.Resources><local:MyConverter x:Key="converter1"/>
</Window.Resources><TextBlock Text="{Binding Value, Converter={StaticResource converter1}}"/>

内置转换器 

转换器描述

StringConverters.IsNullOrEmpty

如果输入的字符串为null或empty,则返回true

StringConverters.IsNotNullOrEmpty

如果输入的字符串不为null或empty,则返回true

ObjectConverters.IsNull

如果输入为null,则返回true

ObjectConverters.IsNotNull

如果输入为null,则返回false

BoolConverters.And

一种多值转换器,如果所有输入均为true,则返回true

BoolConverters.Or

一种多值转换器,如果其中任意输入为true,则返回true

可以作为管道使用,也可以作为控制控件的现实和隐藏。

<!-- 控制是否隐藏 -->
<TextBlock Text="{Binding MyText}"IsVisible="{Binding MyText, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<!-- 转换大小写 -->
<TextBlock Text="{Binding TheContent, Converter={StaticResource textCaseConverter},ConverterParameter=lower}" />

7. 绑定到命令

<Button Command="{Binding DoTheThing}">Do the thing!</Button>
public ReactiveCommand<Unit, Unit> DoTheThing { get; }
public MainWindowViewModel()
{DoTheThing = ReactiveCommand.Create(RunTheThing);
}void RunTheThing()
{// 此处执行命令的代码。
}

8. 绑定到方法

public void RunTheThing(string parameter)
{// 此处执行命令的代码。
}

可用CommandParameter传递参数。

如果需要从viewmodel里面触发CanExcute,则必须用一个或多个DependsOn属性来修饰它。

[DependsOn(nameof(IsTheThingEnabled))]
bool CanRunTheThing(/* CommandParameter */object parameter)
{return IsTheThingEnabled && parameter != null;
}

9.绑定到任务

public Task<string> MyAsyncText => GetTextAsync();private async Task<string> GetTextAsync()
{await Task.Delay(1000);return "Hello from async operation";
}
<TextBlock Text="{Binding MyAsyncText^, FallbackValue='Wait a second'}" />

10.订阅属性的更改

var textBlock = new TextBlock();
var text = textBlock.GetObservable(TextBlock.TextProperty);
text.Subscribe(value => Console.WriteLine(value + " Changed"));

11.绑定到可观察对象

// 我们在这里使用Rx Subject,以便我们可以使用OnNext推送新值
var source = new Subject<string>();
var textBlock = new TextBlock();// 将TextBlock.Text绑定到源
var subscription = textBlock.Bind(TextBlock.TextProperty, source);// 将textBlock.Text设置为“hello”
source.OnNext("hello");
// 将textBlock.Text设置为“world!”
source.OnNext("world!");// 终止绑定
subscription.Dispose();

12.控件模板中绑定

<TextBlock Name="tb" Text="{TemplateBinding Caption}"/><!-- 也能写成这样 -->
<TextBlock Name="tb" Text="{Binding Caption, RelativeSource={RelativeSource TemplatedParent}}"/>

TemplateBinding只接受单个属性而不是属性路径,因此如果要使用属性路径进行绑定,则必须使用第二种语法:

<!-- 这不起作用,因为TemplateBinding只接受单个属性 -->
<TextBlock Name="tb" Text="{TemplateBinding Caption.Length}"/><!-- 在这种情况下,必须使用此语法 -->
<TextBlock Name="tb" Text="{Binding Caption.Length, RelativeSource={RelativeSource TemplatedParent}}"/>

TemplateBinding仅支持单向绑定(OneWay) 、只能用于IStyledElement

<!-- 这不起作用,因为GeometryDrawing不是IStyledElement -->
<GeometryDrawing Brush="{TemplateBinding Foreground}"/><!-- 在这种情况下,必须使用此语法 -->
<GeometryDrawing Brush="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入&#xff08;Loop and Import&#xff09;2. 简单移动&#xff08;Simple move&#xff09;3. 首次攻击&#xff08;First Attack&#xff09;4. 爬虫的身体部分&#xff08;Creeps Bodies&#xff09;5. 存储和转移 &#xff08;Store and Tra…

通过提交容器的方式修改ubuntu镜像的apt源

通过提交容器的方式修改ubuntu镜像的apt源 步骤总结 问题&#xff0c;每次创建容器之后&#xff0c;都要在容器内手动更改镜像源。 不如&#xff0c;干脆修改镜像的apt源&#xff0c;一次到位。 步骤 先创建一个容器&#xff0c;到容器内执行变更命令。 D:/sandbox> dock…

江苏开放大学2024年春《中外设计史 060709》第二次测试参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1美国现代建筑家赖特&#xff0c;提倡“有机建筑”的设…

Yarn 的安装和使用

在前端开发中&#xff0c;包管理工具是必不可少的利器&#xff0c;而 Yarn 就是其中一个备受欢迎的选择。本文将介绍如何安装和使用 Yarn&#xff0c;并解决可能遇到的一些常见问题&#xff0c;让你更高效地管理项目依赖。 什么是 Yarn&#xff1f; Yarn 是由 Facebook、Goo…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特…

【单】Unity _RPG项目中的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a; ⭐…

C++:多态、模板

一、多态 相同的代码、实现不同的功能 1.前提 1.类之间有继承关系 2.父类中有虚函数 3.父类的指针指向子类的对象 2.函数重写 1.发生在继承之间 2.父类中有虚函数 3.子类中对父类的虚函数重新实现 3.虚函数 1.在函数头前加上virtual 2.只要基类中的函数是虚函数&#xff0c;后…

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

如何在Ubuntu系统使用Nextcloud+Cpolar搭建可公网访问私人专属网盘

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛…

[选型必备基础信息] 存储器

存储芯片根据断电后是否保留存储的信息可分为易失性存储芯片&#xff08;RAM&#xff09;和非易失性存储芯片&#xff08;ROM&#xff09;。 简单说&#xff0c;存储类IC分为 ROM和RAM ROM&#xff1a;EEPROM / Flash / eMMC RAM&#xff1a;SRAM/SDRAM/DDR2/DDR3/DDR4/DDR5…

穿什么有这么重要?--装饰模式

1.1 穿什么有这么重要&#xff1f; 约会穿什么&#xff1f; "那要看你想给人家什么印象&#xff1f;是比较年轻&#xff0c;还是比较干练&#xff1b;是比较颓废&#xff0c;还是要比较阳光&#xff1b;也有可能你想给人家一种极其难忘的印象&#xff0c;那穿法又大不一样…

10秒钟用python接入讯飞星火API(保姆级)

正文&#xff1a; 科大讯飞是中国领先的人工智能公众公司&#xff0c;其讯飞星火API为开发者提供了丰富的接口和服务&#xff0c;以支持各种语音和语言技术的应用。 步骤一&#xff1a;注册账号并创建应用 首先&#xff0c;您需要访问科大讯飞开放平台官网&#xff0c;注册一个…

谷歌google广告和必应Bing广告,是否二选一?

搜索引擎广告凭借其精准定向、高度可见性和高效转化能力&#xff0c;成为众多企业拓展海外市场、提升品牌影响力的重要手段。其中&#xff0c;谷歌Google与必应Bing作为全球两大主流搜索引擎&#xff0c;各自拥有庞大的用户群体与独特的市场优势。面对这两大广告平台&#xff0…

非关系型数据库(缓存数据库)redis的高可用(持久化)

目录 1.redis的高可用 2.Redis持久化 1.Redis 提供两种方式进行持久化 2.RDB持久化 2.1触发条件 2.1.1手动触发 2.1.2自动触发 2.1.3其他自动触发机制 2.2执行流程 ​编辑 2.3 启动时加载 3.AOF持久化 3.1开启AOF 3.2 执行流程 3.2.1append——命令追加 3.…

Crossmanager 2024 64 bit(CAD文件格式转换工具)安装包分享

新增功能 1、NavisWorks输入&#xff1a;首次发布&#xff0c;支持2016至2023版本 2、Fusion 360输入&#xff1a;首次发布&#xff0c;支持版本2.0 3、Catia V6/3D体验输入&#xff1a;支持R2023x版本 4、Solidworks输入&#xff1a;支持Solidworks 2023版本 5、Solid Ed…

《QT实用小工具·八》数据库通用翻页类

1、概述 源码放在文章末尾 该项目实现数据库通用翻页类&#xff0c;主要包含如下功能&#xff1a; 1:自动按照设定的每页多少行数据分页 2:只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签 3:提供公共静态方法绑定字段数据到下拉框 4:建议条件字段用数字类型的主…

论微服务架构及应用

2021年初&#xff0c;我所在的公司承担了某能源集团化工产业部的化工生产运营综合管控系统&#xff0c;简称运营管控系统。我有幸担任了该项目的系统架构师&#xff0c;主要负责系统的体系架构、架构评估和研发管理工作。 随着国内外化工行业日新月异的繁荣与发展&#xff…

机器学习 | 线性判别分析(Linear Discriminant Analysis)

1 机器学习中的建模 1.1 描述性建模 以方便的形式给出数据的主要特征&#xff0c;实质上是对数据的概括&#xff0c;以便在大量的或有噪声的数据中仍能观察到重要特征。重在认识数据的主要概貌&#xff0c;理解数据的重要特征。 Task&#xff1a;聚类分析&#xff0c;数据降…