zoukankan      html  css  js  c++  java
  • 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 = "更改绑定非静态字符串";
            }
        }
    }

    单击按键之前界

     单击之后

  • 相关阅读:
    php 删除文件夹下的所有文件
    IBM AppScan 安全扫描:加密会话(SSL)Cookie 中缺少 Secure 属性 处理办法
    Tomcat/weblogic session失效时间的几种设置方法
    truncate与delete的区别
    oninput,onpropertychange,onchange的用法和区别
    HttpSessionBindingListener和HttpSessionAttributeListener区别
    insert table 和create table as 区别
    慎用create table as select,一定要注意默认值的问题
    mysql in与or效率比较
    值域范围
  • 原文地址:https://www.cnblogs.com/lizhiqiang0204/p/12469166.html
Copyright © 2011-2022 走看看