zoukankan      html  css  js  c++  java
  • WPF系列——简单绑定学习

    1. 绑定到元素对象.(实际项目中用处不大)

        界面上两个关联的控件之间绑定,比如一个TextBlock 的FontSize和一个Slider 的Value绑定:

    <Slider Name="sliderFontText" Minimum="1" Maximum="100" Value="10"/>
            <TextBox Name="txtValue" Width="200" 
                     Text="{Binding  ElementName=sliderFontText, Path=Value,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>

    Text的内容就是new了一个Binding对象,设置ElementName,Path等是绑定的属性值.

        XAML对应的C#代码:

    Binding binding = new Binding();
    binding.ElementName = "sliderFontText";
    binding.Path = new PropertyPath("Value");
    binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    binding.Mode = BindingMode.TwoWay;
    txtValue.SetBinding(TextBox.TextProperty, binding);

                  删除绑定:

    BindingOperations.ClearBinding(txtValue, TextBox.TextProperty);

       绑定后属性的操作,如删除绑定,获取控件绑定对象,都可以使用System.Windows.Data.BindingOperations的静态方法.

       BandingModel枚举值介绍:

    名称

    说明

    OneWay

    源属性 -> 目标属性(源变化引发目标变化)

    TwoWay

    源属性 <-> 目标属性(源变化引发目标变化且目标变化也引发源变化)

    OneTime

    首次执行 源属性 -> 目标属性,后面所有变化忽略(除非显示调用BindingExpress.UpdateTarget()或者重新绑定完全不同的对象

    OneWayToSource

    和OneTime绑定方式相反

    Default

    依赖绑定目标属性

    UpdateSourceTrigger枚举值介绍:

    名称

    说明

    PropertyChanged

    目标属性变化 -> 立即更新源

    LostFocus

    目标属性变化 + 目标失去焦点 -> 更新源

    Explicit

    调用BindingExpression.UpdateSource() -> 更新源

    Default

    大部分为PropertyChanged,Textbox.Text是LostFocus

    2. 绑定非界面元素

        1.    绑定静态类的静态属性(系统预定义和自定义方法一致,这里演示一个自定义):

               XAML(c是 命名空间WPFDemo的别名):

    <Button Content="{Binding Source={x:Static c:MyRes.Name}}"/>

               C#: 

    namespace WPFDemo
    {
        public static class MyStaticRes
        {
            public static string Name { get { return "返回的Name"; } }
        }

    }

    2.绑定一般类的一般属性

    XAML:首先需要新建一个资源对象,

    创建资源对象:

    <Window.Resources>
        <c:MyRes x:Key="customRes" Name="自定义资源文本"></c:MyRes>
    </Window.Resources>

    XAML绑定:

    <Button Content="{Binding Source={StaticResource customRes},Path=Name}"/>

    C#:

    namespace WPFDemo
    {
        public class MyRes
        {
            public string Name { get; set; }
        }
    }

    3. 相对绑定

    XAML(这里将StackPanel的Name绑定到Button的Content属性中):

    <StackPanel x:Name="LayoutRoot"> 
            <Button 
                Content="{Binding Path=Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}"/>
        </StackPanel>

    RelativeSource 的Model枚举值值:

    名称 说明
    Self 绑定自己的另外一个属性
    FindAncestor 绑定到父元素,需要设置父元素类型AncestorType和父元素层次AncestorLevel(默认为1)
    PreviousData 绑定到数据绑定列表的前一项
    TemplateParent 绑定到应用模板的元素
         4.DataContext绑定
    <Button Content="{Binding Path=Name}" DataContext="{Binding Source={StaticResource myRes}}"/>

    或者

    <StackPanel Name="MainLayout" DataContext="{Binding Source={StaticResource myRes}}">
            <Button Content="{Binding Path=Name}" />
        </StackPanel>
        Binding中属性介绍

    属性

    含义

    ElementName

    是指绑定的源元素(这里一般指界面元素)

    Path

    源元素的绑定关联属性

    UpdateSourceTrigger

    更新绑定属性的时机

    Model

    更新绑定的方式

    Source 提供数据的引用
    RelativeSource 使用一个RelativeSource对象指向源对象,主要是相对数据源绑定使用
    DataContext 最重要的绑定,没有Source或者RelativeSource,WPF就按照元素树向上查找DataContext属性,并使用第一个非空的DataContext属性

    到这里,基本的Banding就复习完了,这里有一个体会就是,xaml有时候会忘记语法的写法,其实XAML中也是由一个一个的对象组成,组成方式时New一个一个的对象,实例化方式时: {对象类 属性1=XX, 属性2=XX}.

    本文Demo项目下载:https://files.cnblogs.com/files/zhaoxixi/WPFDemo.rar

  • 相关阅读:
    git学习02
    每日一记8.12
    git学习01
    每日一记8.7
    每日一记8.6
    spring boot使用tomcat启动
    每日一记8.1
    【学习笔记】HTML5 WebGL游戏引擎开发
    【转】使用 WebGL 进行 3D 开发,第 3 部分: 添加用户交互
    【转】使用 WebGL 进行 3D 开发,第 2 部分: 使用 WebGL 库以更少的编码做更多的事情
  • 原文地址:https://www.cnblogs.com/zhaoxixi/p/4580382.html
Copyright © 2011-2022 走看看