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)); 
                  
            }
  
     }



最后再包装GetData方法为一个ICommand类型,该接口属于System.Windows.Input命名空间,因此,需要引用PresentationCore.dll

该部分代码为:

private DelegateCommand 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); 
            }
 
        }
 
    }
 
}
posted on 2007-05-20 14:54  圣炎¢天乐  阅读(2079)  评论(1编辑  收藏  举报