2012-10-18 111 views
0

我有一個自動生成它的列的DataGrid。DataGrid模板列綁定

在代碼中,我落實AutoGeneratingColumn事件,要設置一定的模板我的翻譯數據類型:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     if(e.PropertyType == typeof(Translation)){ 
      DataGridTemplateColumn templateColumn = new DataGridTemplateColumn(); 
      templateColumn.CellTemplate = (DataTemplate)Resources["LanguageTemplate"]; 
      e.Column = templateColumn; 
     } 

    } 

的DataTemplate:

<DataTemplate x:Key="LanguageTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
       <ColumnDefinition Width="20"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding Name.ActualTranslation}" HorizontalAlignment="Stretch" Grid.Column="0"></TextBlock> 
      <Image Source="{lex:LocImage en}" Height="15" HorizontalAlignment="Right" Grid.Column="1" Visibility="{Binding Name.HasCurrentLanguage, Converter={StaticResource boolToVis}, ConverterParameter=true}" ></Image> 
     </Grid> 

    </DataTemplate> 

現在的問題發生:TextBlock的必然名稱屬性。如果要顯示的對象具有Name屬性,則工作正常。但是,如果我有沒有名爲「名稱」的翻譯屬性顯然沒有數據顯示。我將如何正確綁定以涵蓋所有翻譯項目。

+0

你還可以發佈翻譯類嗎? –

回答

0

創建一個DataTemplateSelector在哪裏可以選擇正確的DataTemplate爲您當前的翻譯類,並將其添加到您的TextBlock.Text綁定。見more

+0

我不認爲它解決了我的問題。我無法爲所有可能的名稱創建DataTemplate,因此我們的目標是堅持1個DataTemplate。 – TheJoeIaut

0

因爲它看起來像一個單向綁定,做一個簡單的結合與轉換器:

TextBlock Text="{Binding Converter={StaticResource your_converter}}" ... 

和實施轉換你的邏輯。這是最簡單的方法,如果你有不一致的ViewModel你想綁定。