zoukankan      html  css  js  c++  java
  • C# Wpf双向绑定实例

    Wpf中双向绑定处理需要两处

    实例1:

    1.前台Xaml中属性Binding 时Model指定 TwoWay

    <Grid>
        <Ellipse  x:Name="ellipse"
            Fill="#FFF4F4F5" HorizontalAlignment="Left" 
                    Height="{Binding Path=Number,Mode=TwoWay}" Margin="50,55,0,0" Stroke="Black"
                    VerticalAlignment="Top" Width="{Binding Path=Number,Mode=TwoWay}"/>
        <Slider x:Name="slider"  Margin="28,167,22,0" ValueChanged="slider_ValueChanged"
                VerticalAlignment="Top" TickPlacement="Both" Maximum="100" SmallChange="1"/>
        <Label x:Name="label" Content="{Binding Path=Number,Mode=TwoWay}" HorizontalAlignment="Left" Margin="110,150,0,0" VerticalAlignment="Top"/>
    </Grid>

    2.后台绑定的数据上线文实现INotifyPropertyChanged(向客户端发出某一属性值已更改的通知。)接口

    /// <summary>
    /// Thread6.xaml 的交互逻辑
    /// </summary>
    public partial class Thread6 : Window
    {
    
        TestData testData = new TestData() { Number = 10 };
        public Thread6()
        {
            InitializeComponent();
            //创建双向绑定
            ellipse.DataContext = testData;
            label.DataContext = testData;
        }
        private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            testData.Number = (int)e.NewValue;
        }
    }
    public class TestData : INotifyPropertyChanged
    {
        private int _Number;
        public int Number
        {
            get
            {
                return _Number;
            }
            set
            {
                _Number = value;
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Number"));
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }

    显示结果:

    实例2:使用Wpf的双向绑定机制,可以实现多线程修改UI

    注:其他线程修改绑定数据时会通知到UI线程修改界面数据。

    TestData类定义同上

    Xaml定义同上

    //创建双向绑定
    ellipse.DataContext = testData;
    //创建线程修改数据
    Task.Run(() =>
    {
        while (true)
        {
            testData.Number++;
            if (testData.Number == 200)
                testData.Number = 0;
            Thread.Sleep(100);
        }
    });

  • 相关阅读:
    log4net编译后命名空间找不到的问题
    网络流建模汇总
    零散知识点收集
    CentOS7中“ONBOOT”已设置为“yes”但开机后ens33不会自启动解决方案
    Hanoi塔问题
    Mosquitto用户名密码配置
    Activiti5 数据库表结构
    皮尔森相关系数(Pearson correlation coefficient)
    如何用研发流程搞垮一个团队?
    Java 编程规范
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5765464.html
Copyright © 2011-2022 走看看