WPF_全局静态变量并且实现变更通知

WPF_全局静态变量并且实现变更通知

当我是开发WPF时可能会出现一个数据在多个页面使用的情况或者获取的数据在工具类里面需要更新到界面上,这时候就可以使用全局静态变量来实现界面的更新.

第一步:编写全局静态变量并创建变更通知

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WPF_全局静态变量并且实现变更通知.Setting
{
    public class AppSetting
    {
        /// 
        /// 新建静态属性变更通知
        /// 
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

        private static int _testValue = 0;
        public static int TestValue
        {
            get
            {
                return _testValue;
            }
            set
            {
                _testValue = value;
                //调用通知
                StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(TestValue)));
            }
        }

        private static string _Name = "初始值";
        public static string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
                //调用通知
                StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(Name)));
            }
        }
    }
}

第二步:添加local,原始版本MVVM框架是自带这个属性的 ,有的框架会省略.

xmlns:local="clr-namespace:WPF_全局静态变量并且实现变更通知.Setting"

第三步:添加引用

 <Window.Resources>
        <local:AppSetting x:Key="AppSetting" />
    </Window.Resources>

第四步:绑定实例

Text="{Binding TestValue, Source={StaticResource AppSetting}}" />

实例如下

<Window
    x:Class="WPF_全局静态变量并且实现变更通知.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:av="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WPF_全局静态变量并且实现变更通知.Setting"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:prism="http://prismlibrary.com/"
    Title="{Binding Title}"
    Width="525"
    Height="350"
    prism:ViewModelLocator.AutoWireViewModel="True"
    mc:Ignorable="av">
    <Window.Resources>
        <local:AppSetting x:Key="AppSetting" />
    </Window.Resources>
    <Grid>
        <TextBlock
            Margin="75,50,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            FontSize="60"
            Text="{Binding TestValue, Source={StaticResource AppSetting}}" />
        <TextBox
            Width="120"
            Margin="30,15,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Text="{Binding Name, Source={StaticResource AppSetting}}"
            TextWrapping="Wrap" />
        <Button
            Margin="180,14,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Command="{Binding ceshi1}"
            Content="Button" />
    </Grid>
</Window>

总结:当界面更改是 后台静态变量的值也会更改,当变量更改时,界面也会随之更改.可以在多个页面绑定同一个后台静态变量.节省更多的代码

2023.4.22

你可能感兴趣的:(WPF,wpf)