整理:WPF中Binding的几种写法

目的:整理WPF中Bind的写法

 <!--绑定到DataContext-->
        <Button Content="{Binding DataTime}"/>

        <!--绑定到DataContext,并设置绑定模式-->
        <Button x:Name="btn" Content="{Binding DataTime,Mode=OneTime}"/>

        <!--绑定到DataContext,并设置更新模式-->
        <Button Content="{Binding DataTime,UpdateSourceTrigger=PropertyChanged}"/>

        <!--绑定到DataContext,并设置转换模式-->
        <Button Content="{Binding DataTime,Converter={StaticResource ConvertResource},ConverterParameter=btn1}"/>

        <!--绑定到Element中指定属性-->
        <Button Content="{Binding ElementName=btn,Path=Content}"/>

        <!--绑定到相对位置中的自身模式-->
        <Button Content="{Binding RelativeSource={RelativeSource Mode=Self},Path=Tag}" Tag="MyTag"/>

        <!--绑定到相对位置中的父级别查找模式-->
        <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Content}"/>

        <!--绑定到相对位置中的父级别查找模式 绑定到指定类型-->
        <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window},Path=Content}"/>

        <!--绑定到相对位置中的父级别查找模式 绑定到指定层级-->
        <Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=2},Path=Content}"/>

        <!--绑定到相对位置中的父级别查找模式 绑定到模板内容-->
        <Button Content="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Content}"/>

在使用Binding类的时候有4中绑定模式可以选择

BindingMode

TwoWay:

  导致对源属性或目标属性的更改可自动更新对方。此绑定类型适用于可编辑窗体或其他完全交互式 UI 方案。

 

OneWay:

  当绑定源(源)更改时,更新绑定目标(目标)属性。如果要绑定的控件为隐式只读控件,则适用此绑定类型。例如,可以绑定到如股市代号之类的源。或者,可能目标属性没有用于进行更改(例如表的数据绑定背景色)的控件接口。如果不需要监视目标属性的更改,则使用 OneWay 绑定模式可避免 TwoWay 绑定模式的系统开销。

OneTime:

  当应用程序启动或数据上下文更改时,更新绑定目标。此绑定类型适用于以下情况:使用当前状态的快照适合使用的或数据状态实际为静态的数据。如果要从源属性初始化具有某个值的目标属性,并且事先不知道数据上下文,则也可以使用此绑定类型。实质上,这是 OneWay 绑定的较简单的形式,它在不更改源值的情况下可提供更好的性能。

OneWayToSource :

  当目标属性更改时更新源属性。

Default:

  使用绑定目标的默认 Mode 值。每个依赖项属性的默认值都不同。一般情况下,用户可编辑控件属性(例如文本框和复选框的属性)默认为双向绑定,而多数其他属性默认为单向绑定。确定依赖项属性绑定在默认情况下是单向还是双向的编程方法是:使用 GetMetadata 来获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的布尔值。

使用 Mode 属性指定绑定的方向。以下枚举列表列出了可供绑定更新的选项:

  • 无论是目标属性还是源属性,只要发生了更改,TwoWay 就会更新目标属性或源属性。
  • OneWay 仅当源属性发生更改时更新目标属性。
  • OneTime 仅当应用程序启动时或 DataContext 进行更改时更新目标属性。
  • OneWayToSource 在目标属性更改时更新源属性。
  • Default:使用目标属性的默认 Mode 值。

仍然使用上个文章中的文本框,标签控件,以及滚动条来说明绑定模式不同

1。使用twoway方式绑定以后,如果手动更改textbox的值,此时如果通过按钮事件来查看滚动条的value值,就会发现和textbox是一致

2。oneway方式,就是滚动条改变的时候会改变文本框的显示值,但是文本框更改的时候不会更改滚动条的值

3。onetime方法,会发现文本框的值会是滚动条的初始值。而且不会变化

4。onewaytosource。就是文本框更改的时候会改变源的属性。这个时候其实数据源和数据目标已经颠倒过来了

5。default方式,这个方式完全就是根据控件的属性来设置的。有的属性适合twoway方式,比如交互的UI控件,有点只能oneway方式

原文地址:https://www.cnblogs.com/Im-Victor/p/11444189.html

时间: 2024-11-08 18:58:27

整理:WPF中Binding的几种写法的相关文章

【转】WPF中Binding的技巧(一)

WPF中Binding的技巧(一) 在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到过的问题做下汇总记录和理解. 1. source = {binding} 和source = {binding RelativeSource={RelativeSource self},Path=DataContext}效果相同 理解:{binding} 不设定明确的绑定的source,这样bindin

面试中单例模式有几种写法?

"你知道茴香豆的'茴'字有几种写法吗?" 纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style的同时,还很容易扩展到其他问题.这里讲解几种猴子常用的写法,但切忌生搬硬套,去记"茴香豆的写法".编程最大的乐趣在于"know everything, control everything".猴子 JDK版本:oracle java 1.8.0_102 大体可分为4类,下面分别介绍他们的基

wpf中UserControl的几种绑定方式

原文:wpf中UserControl的几种绑定方式 我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易这样.比如: // ChooseUc.xaml <UserControl> <StackPanel Orientation="Horizontal"> <Label Content="选择一个水果:

横冲直撞vue(第三篇):vue中template的三种写法、v-bind、v-on、更新元素的指令v-text与v-html、条件渲染指令v-if 与v-show、v-for

一.vue中template的三种写法 第一种(字符串模板写法): 直接写在vue构造器里,这种写法比较直观,适用于html代码不多的场景,但是如果模板里html代码太多,不便于维护,不建议这么写. <body> <div id="app"></div> <script src="./lib/vue.js"></script> <script type="text/javascript&qu

angularJs中$q的两种写法

带缓存处理的两种写法 过程:点击button触发load()方法,请求数据成后显示到页面中.如果已经请求过则从缓存中读取. 在线浏览 写法1: function demo(){ if (demo.cache == undefined) { return $http.get('https://api.github.com/users/github') .success(function(data, status, headers){ demo.cache = data; return $q(fun

JS 中面向对象的5种写法和拓展JS对象的写法

面向对象的JAVA  最开始当然是对象的定义了 收集了以下的五种写法 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = function() { return Circle.PI * this.r * this.r; } var c = new Circle(1.0); alert(c.area()); //第2种写法 var Circle = function() {

vue中template的三种写法

第一种(使用模板字符串)早期字符串拼接年代 <div id="app"></div> new Vue({ el: "#app", template: '<div> <h1>{{message}}</h1> <div>', data: { message: '字符串拼接' } }) 第二种(使用script元素)HTML5标准之前的写法 <div id="app">

WPF中Binding的Mode属性和ElementName属性简单了解

基本摘抄 只为学习,理解,和复习. 属性Mode,是指绑定方式,它是枚举类型,有分别以下值: oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标. OneTime: 绑定也会将数据从源发送到目标:但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知. OneWayToSource: 绑定会将数据从目标发送到源. TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源. Defaul

python学习过程中if的几种写法

python实例学习中遇到的小问题,我对题目改动一下需要显示每一档的结果,可以用列表和if语句来完成,文章最后是原题目和答案 一.if的方式 A.程序 # !/usr/bin/python# -*- coding: UTF-8 -*- i = int(input('净利润:'))arr = [1000000, 600000, 400000, 200000, 100000, 0]rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]r = 0for idx in r