Silverlight DataGrid 模板列根据内容动态生成控件

       小弟遇到一个问题“如何动态创建Silverlight DataGrid模板列,并且模板列每行的控件有可能不一样?”,在园子里找了半天,也没找到答案,但幸运的是在http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/8e44d306-a68b-4ee7-a82f-68a12e82c7e4找到了答案,现附上代码,希望对大家有所帮助。

1、创建抽象类DataTemplateSelector,继承自内容控件ContentControl

public abstract class DataTemplateSelector : ContentControl
    {
        
public virtual DataTemplate SelectTemplate(object item,DependencyObject container)
        {
            
return null;
        }

        
protected override void OnContentChanged(object oldContent, object newContent)
        {
            
base.OnContentChanged(oldContent, newContent);
            ContentTemplate 
= SelectTemplate(newContent, this);
        }
    }

 

2、创建PersonTemplateSelector,继承自DataTemplateSelector,根据内容动态选择TextBoxTemplate或DatePickerTemplate

public   class  PersonTemplateSelector : DataTemplateSelector
    {
        
public  DataTemplate TextBoxTemplate
        {
            
get ;
            
set ;
        }

        
public  DataTemplate DatePickerTemplate
        {
            
get ;
            
set ;
        }

        
public   override  DataTemplate SelectTemplate( object  item, DependencyObject container)
        {
            Model_PersonDataSet mp 
=  item  as  Model_PersonDataSet;
            
if  (mp.DataType  ==   " D "   ||  mp.DataType  ==   " DT " )
            {
                
return  DatePickerTemplate;
            }
            
else
            {
                
return  TextBoxTemplate;
            }

            
return   base .SelectTemplate(item, container);
        }
    }

3、附上前台XAML代码

  < my1:DataGridTemplateColumn  Header ="值" >
                    
< my1:DataGridTemplateColumn.CellTemplate >
                        
< DataTemplate >
                            
< local:PersonTemplateSelector  Content =" {Binding} " >
                                
< local:PersonTemplateSelector.TextBoxTemplate >
                                    
< DataTemplate >
                                        
< TextBox  Text =" {Binding DEValue,Mode=TwoWay} "  HorizontalAlignment ="Stretch" ></ TextBox >
                                    
</ DataTemplate >
                                
</ local:PersonTemplateSelector.TextBoxTemplate >
                                
< local:PersonTemplateSelector.DatePickerTemplate >
                                    
< DataTemplate >
                                      
< my1:DatePicker  SelectedDate =" {Binding DEValue,Mode=TwoWay} "  SelectedDateFormat ="Long"   />
                                    
</ DataTemplate >
                                
</ local:PersonTemplateSelector.DatePickerTemplate >
                            
</ local:PersonTemplateSelector >
                        
</ DataTemplate >
                    
</ my1:DataGridTemplateColumn.CellTemplate >
                
</ my1:DataGridTemplateColumn >

网上许多例子都是动态创建模板列,而没有解决模板列根据内容动态创建控件的问题,希望对大家有所帮助。

转载于:https://www.cnblogs.com/zjl880/archive/2010/08/09/1795625.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值