日常生活的交流与学习

首页 新随笔 联系 管理

数据绑定

SimpleBinding\MainWindow.xaml

<Window x:Class="SimpleBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SimpleBinding"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <local:Person x:Key="MyDataSource" PersonName="Joe"/>
    </Window.Resources>
    <Border Margin="5" BorderBrush="Aqua" BorderThickness="1" Padding="8" CornerRadius="3">
        <DockPanel Width="200" Height="100" Margin="35">
            <Label>Enter a Name:</Label>
            <TextBox>
                <TextBox.Text>
                    <Binding Source="{StaticResource MyDataSource}" Path="PersonName"
                   UpdateSourceTrigger="PropertyChanged"/>
                </TextBox.Text>
            </TextBox>
            <Label>The name you entered:</Label>
            <TextBlock Text="{Binding Source={StaticResource MyDataSource}, Path=PersonName}"/>
        </DockPanel>
    </Border>
</Window>

SimpleBinding\Person.cs

using System.ComponentModel;
using System.Windows;
using System.Windows.Interop;

namespace SimpleBinding
{
    // This class implements INotifyPropertyChanged
    // to support one-way and two-way bindings
    // (such that the UI element updates when the source
    // has been changed dynamically)
    public class Person : INotifyPropertyChanged
    {
        private string _name;

        public Person()
        {
            MessageBox.Show("Person()", "y/n", MessageBoxButton.YesNo);
        }

        public Person(string value)
        {
            _name = value;
        }

        public string PersonName
        {
            get { return _name; }
            set
            {
                _name = value;
                // Call OnPropertyChanged whenever the property is updated
                OnPropertyChanged("PersonName");
            }
        }

        // Declare the event
        public event PropertyChangedEventHandler PropertyChanged;
        // Create the OnPropertyChanged method to raise the event
        protected void OnPropertyChanged(string name)
        {
            MessageBox.Show("OnPropertyChanged", "y/n", MessageBoxButton.YesNo);
            var handler = PropertyChanged;
            handler?.Invoke(this, new PropertyChangedEventArgs(name));
        }
    }
}

执行流程

Alt text

posted on 2024-01-30 15:14  lazycookie  阅读(7)  评论(0编辑  收藏  举报