2015-06-03 79 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);