zoukankan      html  css  js  c++  java
  • (18)WPF 元素绑定

    绑定具有四个组成部分:

    • 绑定目标对象。
    • 目标属性。
    • 绑定源。
    • 绑定源中要使用的值的路径

    被绑定目标属性必须是依赖项属性 

    一、绑定到元素

    1.元素绑定

        <StackPanel>
            <Slider Name="slider" Width="300" Value="10" Minimum="0" Maximum="30" TickFrequency="1" IsSnapToTickEnabled ="True" TickPlacement="TopLeft"></Slider>
            <Label Name="lable" FontSize="{Binding ElementName=slider,Path=Value}">hello</Label>
        </StackPanel>

    元素绑定 使用{Binding ElementName=   ,Path= }

    这种方式比valueChanged事件要简单

    2.绑定模式

    数据绑定的一个特性是目标会被自动更新,而不考虑元的修改方式

    <Button Name="btn" Click="btn_Click" Width="80"  Height="30"/>
            private void btn_Click(object sender, RoutedEventArgs e)
            {
                slider.Value = 28;
            }

    *注意:如果在绑定了元素的情况下对lable进行字体设置

            private void btn_Click(object sender, RoutedEventArgs e)
            {
                lable.FontSize = 28;
            }

    这将会使元素绑定失效,怎么滑动lable都不会再发生变化

     解决办法,可以通过双向绑定的方式进行绑定

    <Label Name="lable" FontSize="{Binding ElementName=slider,Path=Value,Mode=TwoWay}">hello</Label>

    Mode的值

    OneWay 当源属性变化时更新目标属性

    TwoWay 双向更新

    OneWayToSource 在目标属性更改时,更新源属性

    OneTime  仅当应用程序启动时或 DataContext 进行更改时更新目标属性???

    Default  默认以上方式中的一种

    3.使用代码绑定

                Binding binding = new Binding();
                binding.Source = slider;
                binding.Path = new PropertyPath("Value");
                binding.Mode = BindingMode.TwoWay;
                lable.SetBinding(Label.FontSizeProperty, binding);

    取消绑定

            private void btn_Click(object sender, RoutedEventArgs e)
            {
                BindingOperations.ClearAllBindings(lable);
            }

    一般使用xaml的方式绑定,但当创建动态绑定或删除绑定时需要用代码的方式。

    4.代码检索绑定

            private void btn_Click(object sender, RoutedEventArgs e)
            {
                Binding binding = BindingOperations.GetBinding(lable, Label.FontSizeProperty);
                MessageBox.Show(binding.Source.ToString() + " 2:" + binding.Path.ToString() + " 3: "+binding.Mode.ToString());
            }

    5.多绑定

    6.更新绑定

    反向从目标到源的改变不一定会立即发生,

                Binding binding = new Binding();
                binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

     或者

    <Label Name="lable" FontSize="{Binding ElementName=slider,Path=Value,Mode=OneTime,UpdateSourceTrigger=PropertyChanged}">hello</Label>
    • PropertyChanged 每当绑定目标属性发生更改时,都会更新绑定源
    • LostFocus 每当绑定目标元素失去焦点时,都会更新绑定源
    • Explicit 仅在调用 UpdateSource() 方法时更新绑定源
    • Default 绑定目标属性的默认 UpdateSourceTrigger 值。 大多数依赖属性的默认值为 PropertyChanged,而 Text 属性的默认值为 LostFocus

     7.延迟绑定

    避免频繁操作,延迟500毫秒

    <Label Name="lable" FontSize="{Binding ElementName=slider,Path=Value,Mode=OneTime,Delay=500}">hello</Label>

    二、绑定到非元素对象

    1.Source 

    绑定到提供数据的对象

    2.RelativeSource

    根据相对于目标对象的关系指向源对象 

    3. DataContext

    将大量元素绑定到同一个对象 

  • 相关阅读:
    MySQL 数据库常用命令
    HTML常用标签介绍
    浏览器 返回状态码汇总
    Mysql常用的三种数据库引擎比较
    系统常用端口大全
    nginx入门与实战
    Linux系统基础优化及常用命令
    python开发之virtualenv与virtualenvwrapper讲解
    常用服务安装部署
    远程连接Linux
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12170379.html
Copyright © 2011-2022 走看看