.NET_WPF_为何用数据绑定?怎么用?

基础概念

  • MVVM:设计模式,用于构建WPF应用程序。
  • 数据绑定:将View的UI元素与ViewModel中的数据属性进行关联。
  • Model为应用程序的数据,View是用户界面,而ViewModel则是View和Model之间的中介。
  • 数据绑定优势:数据发生变化时,数据绑定会自动更新UI。
  • 数据绑定将UI与逻辑分离,助于提高应用程序的可维护性和可扩展性。

数据绑定类型

单向绑定 (One-Way Binding)源到目标: 当源属性发生变化时,目标属性会自动更新,但反之则不会。这是最常用的绑定类型。语法示例:{Binding Path=SourceProperty, Mode=OneWay}
双向绑定 (Two-Way Binding):

源到目标和目标到源: 当任一端的属性发生变化时,另一端也会自动更新。常用于表单输入控件。

语法示例:{Binding Path=SourceProperty, Mode=TwoWay}
单向到源绑定 (OneWayToSource):目标到源: 与单向绑定相反,当目标属性发生变化时,源属性会更新,但源属性变化不会影响目标。语法示例:{Binding Path=SourceProperty, Mode=OneWayToSource}
一次性绑定 (OneTime Binding):只在初始化时绑定: 数据绑定只在第一次加载时发生一次,之后不再更新。语法示例:{Binding Path=SourceProperty, Mode=OneTime}
默认绑定:如果未指定绑定模式,WPF将根据上下文自动选择。例如,对于TextBox控件,默认是双向绑定;对于Label控件,默认是单向绑定。

适用场景

  • 单向绑定适用于数据只读显示,不需要用户交互的场景。
  • 双向绑定适用于用户输入需要实时反馈到数据模型的情况。
  • 单向到源绑定适用于需要从UI更新数据模型,但不需要将模型更新反映回UI的情况。
  • 一次性绑定适用于性能敏感的应用,其中不需要随时间更新数据。

MVVM数据绑定demo: 

步骤:

  1. 创建wpf项目。
  2. 创建M,V,VM三个层次文件夹。
  3. 创建person类,创建personViewModel类,创建viewxaml文件。
  4. 置于对应文件夹。
  5. 在view的后台C#代码进行数据绑定。
  6. 运行。

操作图例

步骤2.

步骤4.

步骤6.

步骤6.

步骤3. person类

public class Person : INotifyPropertyChanged
{
    private string name;
    private int age;

    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            OnPropertyChanged(nameof(Name));
        }
    }

    public int Age
    {
        get { return age; }
        set
        {
            age = value;
            OnPropertyChanged(nameof(Age));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

 步骤3. PersonViewModel类

public class PersonViewModel : INotifyPropertyChanged
{
    private Person person;

    public PersonViewModel()
    {
        person = new Person { Name = "张三", Age = 30 };
    }

    public string Name
    {
        get { return person.Name; }
        set
        {
            person.Name = value;
            OnPropertyChanged(nameof(Name));
        }
    }

    public int Age
    {
        get { return person.Age; }
        set
        {
            person.Age = value;
            OnPropertyChanged(nameof(Age));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

步骤3. 创建viewXAML文件

<Window x:Class="MvvmExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MVVM 示例" Height="200" Width="300">
    <Grid>
        <StackPanel>
            <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Margin="10"/>
            <TextBox Text="{Binding Age, UpdateSourceTrigger=PropertyChanged, StringFormat='{}{0}岁'}" Margin="10"/>
        </StackPanel>
    </Grid>
</Window>

步骤5. view的后台代码

            InitializeComponent();
            this.DataContext = new PersonViewModel();

        此处使用单向数据绑定(One-Way Binding),文本框的Text属性被绑定到PersonViewModelNameAge属性。当PersonViewModelNameAge属性发生变化时,这些变化会自动反映到UI上,更新文本框的内容。相反,文本框中的更改不会自动回传给PersonViewModel的属性,除非指定了UpdateSourceTrigger

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值