最简单的绑定示例
本示例将向您展示有关绑定的所有三个要点。
引言
我找到的所有关于 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
属性。为什么?因为
- 我们之前将页面的
DataContext
设置为Counter
对象,并且 Binding
之后指定的属性名称指的是它的一个属性。
现在您可以运行该应用程序(在模拟器中),单击该按钮,并查看其值被递增。如果您愿意,可以下载示例解决方案以查看代码。
然后您可以继续阅读网络上更复杂的示例。