2015-06-03 60 views
0

我使用GridView和ListView控件来显示一些目录内容。我使用后面的代码动态加载ListView内容,创建GridViewColumns并将它们绑定到我自定义的catListItem类中的属性。动态绑定GridView CellTemplate内容

 var view = new GridView(); 

     var binding = new Binding("Name"); 
     var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of"); 
     view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding }); 

     binding = new Binding("Number"); 
     resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr"); 
     view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding }); 

一切都很好,但现在我想用一些图标添加列,使用GridViewColumn的CellTemplate财产。事情是这样的:

var view = new GridView(); 

     var col = new GridViewColumn { Header = "" }; 
     var template = new System.Windows.DataTemplate(typeof(Image)); 

     col.CellTemplate = template; 
     view.Columns.Add(col); 

     var binding = new Binding("Name"); 
     var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of"); 
     view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding }); 

     binding = new Binding("Number"); 
     resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr"); 
     view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding }); 

我知道有使用DisplayMemberBinding,CellTemplate和CellTemplateSelector时优先。 所以我的问题是: 如何创建(设置,...)CellTemplate的内容,并可能将其绑定到我的自定义类的属性动态?我不知道我错过了什么!我已经搜索过这个问题,但是我发现的一切都是使用DataTemplate的XAML解决方案。 使用代码隐藏它很重要。 在此先感谢!

+0

为什么要使用图片的DataTemplate中,它将返回默认模板图像,必须具有名称自定义的DataTemplate,用它来代替typeof运算(图) –

+0

@ MitanShan谢谢你的回答,但我不确定我是否理解你的观点。是否强制创建自定义DataTemplate?我无法找到一种方法来处理代码。是不是可以将默认的图像模板绑定到我的自定义属性? –

+0

它不会帮助,因为图像模板将需要与图像控制相关的属性,如果需要,您必须在代码中定义DataTemplate。 –

回答

0

其实我找到了解决办法 HERE

我不得不使用FrameworkElementFactory。这是我一直在寻找的代码:

 var column = new GridViewColumn { Header = "" }; 
     var customTemplate = new System.Windows.DataTemplate(); 
     var efImage = new FrameworkElementFactory(typeof(Image)); 
     efImage.SetBinding(Image.SourceProperty, new Binding("Icon")); 
     customTemplate.VisualTree = efImage; 
     column.CellTemplate = customTemplate; 
     view.Columns.Add(column);