2012-11-14 94 views
0

對不起,我不是那麼很一般的問題......從代碼中創建的DataTemplate背後

我有一個ListView我從代碼填寫後面,這ListView控件還需要從代碼獲取其GridViewColumn的後面。

對於字符串,是不需要努力進行連接,但現在我wan't創建一個代表在ListView一個布爾值,一個橢圓。

在XAML代碼是相當容易的,但我在它轉換成C#代碼失敗。

這裏是XMAL的部分代碼:

<ResourceDictionary> 
    <BooleanToVisibilityConverter x:Key="BoolToVisibility" /> 
    <DataTemplate x:Key="templateAdmin"> 
     <DockPanel> 
      <Ellipse Width="8" Height="8" Visibility="{Binding Path=isAdmin, Converter={StaticResource BoolToVisibility}}" Fill="Black"/> 
     </DockPanel> 
    </DataTemplate> 
</ResourceDictionary> 

<ListView> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding LastName}" Header="Last Name"/> 
      <GridViewColumn CellTemplate="{StaticResource templateAdmin}" 
       <GridViewColumnHeader"> 
        <TextBlock Text="S"/> 
       </GridViewColumnHeader> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

而且現在我已經得到了這一步: XAML:

<local:SortableListView > 
    <ListView.View> 
     <GridView x:Name="GroupListGridView" /> 
    </ListView.View> 
</local:SortableListView> 

而在代碼中,我有一個Collection<GridViewColumn> GridViewColumns我環路通過量和將所有項目添加到GroupListGridView。我有一個功能,填補了GridViewColumns集合:

private void CreateGridViews() 
{ 
    //Creating the Text was easy! 
    GridViewColumns.add(new GridViewColumn(){ Header = "LastName", DisplayMemberBinding = new Binding("LastName") }); 

    //Creating the Ellipse was harder! 
    GridViewColumn gvc = new GridViewColumn(); 
    DataTemplate dt = new DataTemplate(); 

    gvc.DisplayMemberBinding = new Binding("isAdmin"); 
    FrameworkElementFactory fef = new FrameworkElementFactory(typeof(Ellipse)); 
    fef.SetValue(Ellipse.WidthProperty, 8.0D); 
    fef.SetValue(Ellipse.HeightProperty, 8.0D); 
    fef.SetValue(Ellipse.FillProperty, new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Black)); 

    //I'm guessing that somewhere here there should be some binding to the visibility property and some sort of conversion done... But I can't figure out how! 

    dt.VisualTree = fef; 
    gvc.CellTemplate = dt; 
    GridViewColumns.Add(gvc); 
} 

我不認爲我遠遠的......只是,我無法找出那些最後的步驟!

+1

是否有一個真正的好在代碼背後創建它的原因? – Charleh

+0

clone http://stackoverflow.com/questions/248362/how-do-i-build-a-datatemplate-in-c-sharp-code –

回答

0

缺少的線路有:

var ellipseVisBinding = new Binding("isAdmin"); 
ellipseVisBinding.Converter = new BooleanToVisibilityConverter(); 

fef.SetBinding(Ellipse.VisibilityProperty, ellipseVisBinding); 

(我注意到,你從你的代碼的版本,所以我已刪除以及排除DockPanel中的模板)

相關問題