📜  MVVM – WPF数据绑定(1)

📅  最后修改于: 2023-12-03 15:03:04.226000             🧑  作者: Mango

MVVM – WPF数据绑定

MVVM模式是一种用于.NET和WPF应用程序的架构模式。它是一种分离视图、业务逻辑和数据的最佳实践方法。MVVM模式的概念相当简单,但是在大型项目中实现它可能会有点复杂。本文将介绍MVVM模式以及它的一个核心组成部分 - WPF数据绑定。

MVVM 模式的基本原则

MVVM 模式包含三个部分:视图、视图模型和模型。

视图(View)

视图就是用户界面,它包含了应用程序的各种控件,比如按钮、文本框和标签等。视图定义了如何呈现数据,并处理用户交互。

视图模型(ViewModel)

视图模型是处理视图相关数据的逻辑层。它从模型中获取数据,格式化并处理数据以及提供绑定数据的属性。视图模型通常实现了INotifyPropertyChanged接口,通过该接口调用PropertyChanged事件来提供数据更改通知。

模型(Model)

模型负责管理应用程序的数据。它可以从远程服务器、数据库或其他数据源中检索数据,也可以保存和更新数据。模型通常包含业务逻辑并封装了应用程序的数据操作。

数据绑定

WPF数据绑定是MVVM模式的核心组成部分。它提供了一种将视图(View)和视图模型(ViewModel)之间的数据进行同步的方式。

单向绑定

单向绑定(OneWay)是将视图模型的属性绑定到视图元素的属性上。当视图模型属性改变时,该改变会在视图元素上反映出来。

<Label Content="{Binding MyLabelText}" />
public class MyViewModel : INotifyPropertyChanged {
    private string myLabelText;

    public string MyLabelText {
        get { return myLabelText; }
        set {
            myLabelText = value;
            OnPropertyChanged(nameof(MyLabelText));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
双向绑定

双向绑定(TwoWay)是将视图模型的属性绑定到视图元素的属性上,并将视图元素的属性更改反映回视图模型的属性中。

<TextBox Text="{Binding MyTextProperty, Mode=TwoWay}" />
public class MyViewModel : INotifyPropertyChanged {
    private string myTextProperty;

    public string MyTextProperty {
        get { return myTextProperty; }
        set {
            myTextProperty = value;
            OnPropertyChanged(nameof(MyTextProperty));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
集合绑定

集合绑定是将视图模型中的集合绑定到视图元素的集合上。

<ListBox ItemsSource="{Binding MyItems}" />
public class MyViewModel : INotifyPropertyChanged {
    private ObservableCollection<string> myItems;

    public ObservableCollection<string> MyItems {
        get { return myItems; }
        set {
            myItems = value;
            OnPropertyChanged(nameof(MyItems));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName) {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
结论

WPF数据绑定是MVVM模式的基本组成部分之一。单向绑定、双向绑定和集合绑定是WPF数据绑定的三个主要类型,可帮助我们实现数据和视图元素之间的数据同步。对于大型应用程序,使用MVVM模式以及正确的数据绑定技术非常重要。