65.9K
CodeProject 正在变化。 阅读更多。
Home

最简单的绑定示例

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (5投票s)

2012年9月4日

CPOL

2分钟阅读

viewsIcon

19481

downloadIcon

143

本示例将向您展示有关绑定的所有三个要点。

引言

我找到的所有关于 Silverlight 绑定的示例都使用了集合,或者缺少一些信息,导致无法将所有内容整合在一起。这里包含了您开始使用所需的一切。

Using the Code

下面,我将告诉您该怎么做,然后展示完整的代码。

步骤 1:创建一个可观察类型

在这里,我们创建一个实现 INotifyPropertyChanged 接口的类,并在其属性发生更改时引发适当的事件。启动 Visual Studio 2010。创建一个新项目,并选择 Windows Phone / Windows Phone 应用程序的 Silverlight。添加一个名为 ObservableInt 的新类。该类型将保存一个整数值,并在其值发生更改时引发 PropertyChanged 事件。

可选:为了使一切清晰明了,请删除未使用的 using 语句(右键单击代码,选择“组织引用”,然后选择“删除未使用的引用”)。现在代码如下所示

using System;

namespace BindingSample1
{
    public class ObservableInt
    {
    }
}

假设您的类有一个您想要通过绑定访问的属性。添加这样一个属性

protected int m_Value;
 
public int Value
{
    get { return m_Value; }
    set
    {
        if (!(this.m_Value.Equals(value)))
        {
            this.m_Value = value;
            NotifyPropertyChanged("Value"); // see in next step
         }
    }
}

现在,实现 INotifyPropertyChanged:添加一个 using 语句、一个事件和一个 NotifyPropertyChanged 方法

using System;
using System.ComponentModel;
 
namespace BindingSample1
{
    public class ObservablInt : INotifyPropertyChanged
    {
        ...
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

现在代码如下所示

using System;
using System.ComponentModel;
 
namespace BindingSample1
{
    public class ObservableInt : INotifyPropertyChanged
    {
        protected int m_Value;
 
        public int Value
        {
            get { return m_Value; }
            set
            {
                if (!(this.m_Value.Equals(value)))
                {
                    this.m_Value = value;
                    NotifyPropertyChanged("Value");
                }
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected void NotifyPropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

步骤 2:将 XAML 页面的 DataContext 设置为您的对象

在这里,我们将创建一个按钮,其文本将在每次单击时更改。(文本将显示单击按钮的次数。)

打开主页的代码隐藏文件。在解决方案资源管理器中,右键单击 MainPage.xaml 并选择“查看代码”。添加我们类型的一个成员变量

ObservableInt Counter = new ObservableInt();

现在转到设计器,并将一个按钮添加到主页(保留其名称“button1”)。

双击此按钮以创建其单击事件处理程序,并像这样实现它

Counter.Value++;

将页面的 DataContext 设置为我们创建的 Counter。将此添加到 MainPage 构造函数

LayoutRoot.DataContext = Counter;

删除未使用的 using 语句。

现在代码(MainPage.xaml.cs)如下所示

using System.Windows;
using Microsoft.Phone.Controls;
 
namespace BindingSample1
{
    public partial class MainPage : PhoneApplicationPage
    {
        ObservableInt Counter = new ObservableInt();
 
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            LayoutRoot.DataContext = Counter;
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Counter.Value++;
        }
    }
}

步骤 3:将控件的属性绑定到源属性

现在我们将一个目标属性(button1.Content)绑定到一个源属性(Counter.Value)。在设计器中,选择您添加的 Button。在其属性表中,找到 Content 属性,并将它的源更改为绑定(单击 Content 属性行中的图标,然后选择“应用数据绑定”)。

在 XAML 编辑器中,将此行更改为...

Button Content="{Binding}"

...为这样...

Button Content="{Binding Value}"

请注意,“Value”指的是 Counter 对象(Counter.Value)的 Value 属性。为什么?因为

  1. 我们之前将页面的 DataContext 设置为 Counter 对象,并且
  2. Binding 之后指定的属性名称指的是它的一个属性。

现在您可以运行该应用程序(在模拟器中),单击该按钮,并查看其值被递增。如果您愿意,可以下载示例解决方案以查看代码。

然后您可以继续阅读网络上更复杂的示例。

© . All rights reserved.