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

【avalonia教程】14Binding的其他属性(1)

如果我们不想关心使用Binding的时候,控件找到的DataContext属性是啥,也可以手动给Binding的属性指定DataContext类型:

<TextBlock Text="{Binding PageDesc,DataType={x:Type vm:TextBlockViewModel}}"></TextBlock>

虽然在rider里也会有标红报错,但应该是属于插件的bug,实际是可以跑起来,手动给TextBlock组件设置DataContext属性时,也是可以正常显示的。完整代码如下:

                <TextBlock Text="{Binding PageDesc,DataType={x:Type vm:TextBlockViewModel}}"><TextBlock.DataContext><vm:TextBlockViewModel></vm:TextBlockViewModel></TextBlock.DataContext></TextBlock>

这里再说下x:Type,实际上和x:Static一样,也是属于一个扩展标记语法。用法和System.Type一致,表示后面跟的是一个类的Type类型(即等价于typeof(类名)的返回值)

接下来说一说d:DataContext。之前我们讲过设计时绑定,即设置Design.DataContext。当时我们是放在Window节点中间的,也可以简写放到WIndow标签的属性里面,并指定一个静态变量,代码如下:

public class MainWindowViewModel: ObservableObject
{// 设置一个静态变量public static MainWindowViewModel Instance { get; set; } = new MainWindowViewModel();public string PageDesc { get; set; } = "avalonia ui";
}
<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="100"x:Class="avalonia_study.MainWindow"xmlns:vm="using:avalonia_study.ViewModels"x:DataType="vm:MainWindowViewModel"d:DataContext="{x:Static vm:MainWindowViewModel}"Title="avalonia_study"><TextBlock Text="{Binding  PageDesc}"></TextBlock>
</Window>

即可在预览窗口看到相关信息

然后Binding中还有四个属性在这里可以提一下:

  • FallbackValue: 当绑定无法解析时使用的默认值,常用于设计时预览或错误处理
  • TargetNullValue: 当源数据为 null 时显示的替代值
  • Priority: 设置绑定值的优先级级别
  • UpdateSourceTrigger: 控制 TwoWay 和 OneWayToSource 绑定中源更新的触发时机

关于前两个很好理解,代码如下:

<TextBox Name="DemoBlock" FontSize="32" Text="{Binding #DemoBlock2.Text,FallbackValue=abc, TargetNullValue=efg}"></TextBox>

再说下BindingPriority。BindingPriority(绑定优先级)是 Avalonia 中用于控制不同来源值优先级的机制。他要解决的问题是:当有多个地方同时对一个属性赋值,谁的优先级最高?

他的工作原理是:

  • 当多个来源试图设置同一个属性时,只有最高优先级的值会被应用
  • 低优先级的绑定值会被高优先级的值覆盖。例如:样式设置的值会被本地显式设置的值覆盖

从低到高的优先级顺序:

  • BindingPriority.Animation

  • BindingPriority.LocalValue

  • BindingPriority.StyleTrigger

  • BindingPriority.Template

  • BindingPriority.Style

    BindingPriority.Inherited

    BindingPriority.Unset

实际应用场景:

// 设置绑定优先级
var binding = new Binding("PropertyName")
{Priority = BindingPriority.Animation  // 设置为动画优先级
};

这里里面有些什么模板值呀、样式值呀之类的相关你概念,我们还没讲到,大家知道有这么个东西,有用这些概念列举的优先级就行了

再说下UpdateSourceTrigger。

UpdateSourceTrigger 是 Avalonia 数据绑定中的一个重要属性,用于控制双向绑定中源数据更新的时机。也就是当控件属性修改时,何时触发绑定的源属性修改。

主要有以下这么几个

  • UpdateSourceTrigger.Default: 使用目标属性的默认更新触发方式
  • UpdateSourceTrigger.LostFocus: 当控件失去焦点时更新源数据
  • UpdateSourceTrigger.PropertyChanged: 当目标属性值改变时立即更新源数据
  • UpdateSourceTrigger.Explicit: 只能通过显式调用更新方法来更新源数据

前面三个拿TextBox试一下即可,视频教程中会做详细演示,这里不做赘述。这里着重说下最后一个:设置为Explicit之后,如何通过手动的方式来更新数据源

var bindingExpressionBase = BindingOperations.GetBindingExpressionBase(DemoBox, TextBox.TextProperty);
bindingExpressionBase?.UpdateSource();
http://www.dtcms.com/a/509292.html

相关文章:

  • 福州网站建设新闻东莞营销型手机网站建设
  • 网站后台维护怎么做电商网站开发会遇到哪些问题
  • 企业网站pc优化wordpress 博客源码
  • 合肥营销型网站秀主题wordpress
  • 管理网站建设wordpress三栏cms主题
  • 建站用Wordpress还是做网站素材网
  • 无人机编队控制图案组合的实现方法与仿真技术详解
  • 个人网站源代码网站锚点链接怎么做
  • 网站怎么做收录网站做聚合页面方案如何写
  • 网站建设公司诺玺网络重庆城乡住房建设厅网站
  • wordpress是干嘛的北京网站搜索引擎优化
  • 慈溪网站建设网站推广专业定制网站公司
  • 在腾讯云怎样建设网站昆明网络营销公司哪家好
  • 个人站长做导航网站wordpress装饰主题
  • 利用php做直播网站网站改版要改哪些页面
  • 用AI重构人机关系,OPPO智慧服务带来了更“懂你”的体验
  • 谷歌网站收录提交入口正规的百度快排seo
  • 网站的设计怎样帮拍卖网站做策划
  • 做二手房销售要开自己的网站吗赣州的免费网站建设
  • 网站开发前端模板创意设计专业
  • php网站源码带后台宁波seo网络推广推荐
  • 网站建设公司的市场营销方案模板北京装修平台网站
  • 青岛西海岸新区建设局网站潍坊正规建设网站
  • kubernetes中的pod管理
  • 广州网站建设性价比网络工程师高级职称
  • 博客类网站怎么做百度关键词搜索优化
  • 彩票网站如何建设什么样的网站容易做seo
  • 《道德经》第二十五章
  • 深圳网站建设电话ps如何做网页
  • 具体的网站建设如何防止网站被注册