WPF中对于数据绑定有三种方式,
1. 对于xml数据的绑定,可以通过添加XML Data Source完成,这个在Blend里面通过Project-àData-à+XML完成添加,然后将生成的XML Data Source拖到要绑定的数据上即可.
2. 两个控件属性的绑定,这个只要在目标控件属性的扩展属性窗口中编辑一下绑定,即可,与前一种大同小异.
3. 对于CLR Object的绑定,这种最灵活,也最复杂.首先,需要将集合数据包装成ObservableCollection,该类属于System.Collections.ObjectModel命名空间,需要引用WindowsBase.dll. 该部分代码如下:
private ObservableCollection<ProductInfo> productPhotos1 = new ObservableCollection<ProductInfo>();
public ObservableCollection<ProductInfo> ProductPhotos1
{ get { return this.productPhotos1; } }
private void GetData() //用于获取数据集合
{
ProductPhotosTableAdapters.ProductsTableAdapter da =
new ProductPhotosTableAdapters.ProductsTableAdapter();
ProductPhotos.ProductsDataTable dt = da.GetData();
productPhotos1.Clear();
foreach (ProductPhotos.ProductsRow row in dt) //包装为ObservableCollection
{
productPhotos1.Add(new ProductInfo(
row.ProductID,
row.ProductName));
}
}
public ObservableCollection<ProductInfo> ProductPhotos1
{ get { return this.productPhotos1; } }
private void GetData() //用于获取数据集合
{
ProductPhotosTableAdapters.ProductsTableAdapter da =
new ProductPhotosTableAdapters.ProductsTableAdapter();
ProductPhotos.ProductsDataTable dt = da.GetData();
productPhotos1.Clear();
foreach (ProductPhotos.ProductsRow row in dt) //包装为ObservableCollection
{
productPhotos1.Add(new ProductInfo(
row.ProductID,
row.ProductName));
}
}
最后再包装GetData方法为一个ICommand类型,该接口属于System.Windows.Input命名空间,因此,需要引用PresentationCore.dll.
该部分代码为:
private DelegateCommand getDataCommand;
public ProductPhotosCollection()
{
getDataCommand = new DelegateCommand(delegate() { GetData(); });
}
public DelegateCommand GetDataCommand { get { return getDataCommand; } }
public ProductPhotosCollection()
{
getDataCommand = new DelegateCommand(delegate() { GetData(); });
}
public DelegateCommand GetDataCommand { get { return getDataCommand; } }
其中DelegateCommand 是实现ICommand 的类,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
namespace AWDataSource
{
public sealed class DelegateCommand : ICommand
{
public delegate void SimpleEventHandler();
private SimpleEventHandler handler;
private bool isEnabled = true;
public DelegateCommand(SimpleEventHandler handler)
{
this.handler = handler;
}
ICommand implementation
public bool IsEnabled
{
get { return this.isEnabled; }
set
{
this.isEnabled = value;
this.OnCanExecuteChanged();
}
}
private void OnCanExecuteChanged()
{
if (this.CanExecuteChanged != null)
{
this.CanExecuteChanged(this, EventArgs.Empty);
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
namespace AWDataSource
{
public sealed class DelegateCommand : ICommand
{
public delegate void SimpleEventHandler();
private SimpleEventHandler handler;
private bool isEnabled = true;
public DelegateCommand(SimpleEventHandler handler)
{
this.handler = handler;
}
ICommand implementation
public bool IsEnabled
{
get { return this.isEnabled; }
set
{
this.isEnabled = value;
this.OnCanExecuteChanged();
}
}
private void OnCanExecuteChanged()
{
if (this.CanExecuteChanged != null)
{
this.CanExecuteChanged(this, EventArgs.Empty);
}
}
}
}