惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 圣炎¢天乐

Eds 公司 武汉 2008.2招聘 EDS 公司专用英文简历模板 GAT&GAX群 如何写自己的Guidance Packages(一) (转)聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术 GAT & GAX 简介 技巧/诀窍:在ASP.NET中重写URL 微软发布WF教程及大量示例 Web Service Software Factory SEO课程笔记(二) SEO课程笔记 InfoPath 2007 的一些开发资源 WPF的最新开发资料和文档 关于WPF的外观设计 - 圣炎¢天乐 - 博客园 Page Controller (页面控制器)和Front Controller(前端控制器) MVC设计模式 编写自定义 HTTP 模块 关于.net中访问InfoPath 2007 的权限配置???? ADO.NET性能改善方法集合
WPF数据绑定
圣炎¢天乐 · 2007-05-20 · via 博客园 - 圣炎¢天乐

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