美文网首页
WPF绑定属性更改通知测试

WPF绑定属性更改通知测试

作者: Ritchie_Li | 来源:发表于2022-09-24 21:33 被阅读0次

使用场景,UI绑定一个模型的一个属性,属性的改变也触发界面上的绑定值的改变。一般绑定属性值的变化要立即触发UI绑定元素的变化,类的属性需要继承INotifyPropertyChanged。

如 Name1, 输入完成,失去焦点时,才触发其它绑定的改变。将触发方式改为UpdateSourceTrigger=PropertyChanged, 时,只要有属性值改变,立即触发绑定。Age属性使用相同的绑定方式。

左边输入属性值,右边Copy也跟着变化。

代码如下:

1. 创建绑定触发更改通知的基类

using System.ComponentModel;

using System.Runtime.CompilerServices;

public class BindingBase : INotifyPropertyChanged

    {

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")

        {

            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        }

    }

2. 创建窗口绑定的显示的数据模型类

public class MainViewModel : BindingBase

    {

        public MainViewModel() { }

        private int age;

        public int Age

        {

            get { return age; }

            set

            {

                age = value;

                OnPropertyChanged();

            }

        }

        private string name;

        public string Name

        {

            get { return name; }

            set

            {

                name = value;

                OnPropertyChanged();

                //OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("Name"));

            }

        }

    }

3. WPF UI窗口创建绑定

后台代码:

namespace WpfAppBindNotify

{

    /// <summary>

    /// MainWindow.xaml 的交互逻辑

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            this.DataContext = new MainViewModel();

        }

    }

}

前台XAML创建绑定:

<Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"/>

            <ColumnDefinition Width="Auto"/>

            <ColumnDefinition Width="*"/>

        </Grid.ColumnDefinitions>

        <GridSplitter Grid.Column="1" Width="3" Background="LightGreen" ResizeBehavior="PreviousAndNext"/>

        <StackPanel Grid.Column="0" Margin="2">

            <DockPanel>

                <Label DockPanel.Dock="Left">Name1:</Label>

                <TextBox  x:Name="txt" Margin="2" Text="{Binding Name}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Name2(UpdateSourceTrigger=PropertyChanged):</Label>

                <TextBox x:Name="txt2" Margin="2" Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Age1:</Label>

                <TextBox x:Name="txtAge" Margin="2" Text="{Binding Age}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Age2(PropertyChanged):</Label>

                <TextBox x:Name="txtAge2" Margin="2" Text="{Binding Age,UpdateSourceTrigger=PropertyChanged}"></TextBox>

            </DockPanel>

        </StackPanel>

        <StackPanel Grid.Column="2" Margin="2">

            <DockPanel>

                <Label DockPanel.Dock="Left">Name1_Copy:</Label>

                <TextBox x:Name="txtCopy" Margin="2" Text="{Binding Name}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Name2_Copy:</Label>

                <TextBox x:Name="txt2Copy" Margin="2" Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Age1_Copy:</Label>

                <TextBox x:Name="txtAgeCopy" Margin="2" Text="{Binding Age}"></TextBox>

            </DockPanel>

            <DockPanel>

                <Label DockPanel.Dock="Left">Age2_Copy:</Label>

                <TextBox x:Name="txtAge2Copy" Margin="2" Text="{Binding Age}"></TextBox>

            </DockPanel>

        </StackPanel>

    </Grid>

相关文章

  • WPF绑定属性更改通知测试

    使用场景,UI绑定一个模型的一个属性,属性的改变也触发界面上的绑定值的改变。一般绑定属性值的变化要立即触发UI绑定...

  • WPF数据绑定

    元素绑定 数据绑定最简单的形式是,源对象是WPF元素而且源属性是依赖属性。依赖项属性具有内置的更改通知支持,当在源...

  • 测试WPF绑定bug

    1、低级错误:有没有绑错2、去属性那里打断点,get、set有没有进3、xaml加上twoway,UpdateSo...

  • WPF 元素绑定测试

    实现将TextBox字体大小绑定到Slider的Value属性,代码查询绑定关系。 实现使用代码创建绑定,解除绑定...

  • angular 学习记录(四)

    数据绑定: 一、数据双向绑定( [(...)] ): 你经常需要显示数据属性,并在用户作出更改时更新该属性。在元素...

  • wpf 中的无效绑定

    设置wpf绑定的跟踪级别为high,output中观察wpf的处理流程: 对于一个无效的绑定,wpf尝试了5次,最...

  • 属性更改通知(INotifyPropertyChanged)——

    问题 在开发webform中,wpf中的ObservableCollection,MSDN中说,在添加项,移...

  • SwiftUI - 属性包装器记录

    属性包装器: - 属性(简单值或者对象)更改后,按照规则,跟属性绑定的UI都会重新渲染, @State 修饰简单的...

  • WPF ControllTemplate Triggers小记

    WPF中,样式模板中如果定义EventTrigger事件方式实现动画。那么需要注意两点: 1、对于绑定的属性的Ev...

  • (三、8)双向数据绑定

    使用单向数据绑定,您可以在属性上设置值,并设置对该属性中的更改作出反应的侦听器: 双向数据绑定提供了此过程的快捷方...

网友评论

      本文标题:WPF绑定属性更改通知测试

      本文链接:https://www.haomeiwen.com/subject/rqjaortx.html