• WPF 绑定之静态与非静态属性更改


     源码下载地址:https://github.com/lizhiqiang0204/Static-and-non-static-property-changes

    程序集整体结构如下

     MainWindow.xaml布局如下

    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <StackPanel >
                <Label Content="{Binding myClassA.myString}"/>
            </StackPanel>
    
            <StackPanel Grid.Row="1" >
                <StackPanel.DataContext>
                    <!--该Grid所有绑定都是绑定到ClassA里面的属性-->
                    <local:ClassA/>
                </StackPanel.DataContext>
                <Label Content="{Binding myLabel}"/>
    
                <!--绑定到ClassA里面myLabel字符串属性-->
                <Button x:Name="myButton" Content="ButtonA" Click="ButtonA_Click" />
                <!--在MainWindow.xaml.cs后台文件中执行按键单击事件,单击事件就是改变ClassA中的myLabel属性同时在界面上显示出更改的信息-->
            </StackPanel>
        </Grid>

    ClassA.cs如下

    using System;
    using System.ComponentModel;
    
    namespace WpfApp1
    {
        public class ClassA : INotifyPropertyChanged
        {
            private static string label = "静态字符";
            public static string myLabel
            {
                get { return label; }
                set
                {
                    label = value;
                    StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(myLabel)));//异步更新静态属性
                }
            }
            public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;//静态事件处理属性更改
    
            private  string str = "非静态字符";
            public  string myString
            {
                get { return str; }
                set
                {
                    str = value;
                    OnPropertyChanged("myString");//异步更新非静态属性
                }
            }
            
            public event PropertyChangedEventHandler PropertyChanged;//非静态属性更改
            protected virtual void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                    PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    MainWindow.xaml.cs如下
    using System.Windows;
    
    namespace WpfApp1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public ClassA myClassA { get; set; } = new ClassA();
            public MainWindow()
            {
                InitializeComponent();
                DataContext = this;
            }
    
            private void ButtonA_Click(object sender, RoutedEventArgs e)
            {
                ClassA.myLabel = "更改绑定静态字符";
                myClassA.myString = "更改绑定非静态字符串";
            }
        }
    }

    单击按键之前界

     单击之后

  • 相关阅读:
    在vim中设置将tab自动转化为4个空格
    nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache
    Centos7安装杀毒软件ClamAV
    网页中meta标记
    js刷新页面方法大全
    微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法
    phpcms v9 如何实现用户登录
    web页面自适应手机屏幕宽度
    微信公共平台消息回复类
    自动回复微信消息
  • 原文地址:https://www.cnblogs.com/lizhiqiang0204/p/12469166.html
Copyright © 2020-2023  润新知