2011-09-08 59 views

回答

0

下面的代碼純粹是爲了指導和編譯不測試...

  1. 你應該使用DataGridTemplateColumn這一點。

  2. 指定DataGridTemplateColumn.CellTemplate如下

    <DataTemplate> 
        <Grid> 
         <Button Visibility="{Binding BaseClassPropertyValue, 
            Converter={StaticResource SubclassToVisibilityConverter}, 
              ConverterParameter='Button'}"/> 
         <ChecBox Visibility="{Binding BaseClassPropertyValue, 
            Converter={StaticResource SubclassToVisibilityConverter}, 
              ConverterParameter='CheckBox'}"/> 
        </Grid> 
    </DataTemplate> 
    
  3. SubclassToVisibilityConverter.Convert()方法使用下面的邏輯...

    if (parameter == "Button") 
    { 
        if (value is ClassA) 
        { 
        return Visibility.Visible; 
        } 
        else 
        { 
        return Visbility.Collapsed; 
        } 
    } 
    else if (parameter == "CheckBox") 
    { 
        if (value is ClassB) 
        { 
        return Visibility.Visible; 
        } 
        else 
        { 
        return Visbility.Collapsed; 
        } 
    } 
    

讓我知道,如果這有助於。

0

你總是可以試試這個:

ObservableCollection<MyBaseClass> myCollection = new ObservableCollection<MyBaseClass>; 
myCollection.Add(new Subclass_A()); 
myCollection.Add(new Subclass_B()); 

...

創建每個子類來包裝你的MyCollection的到的DataGrid的DataTemplates。在這一點上,你將有兩種類型的網格(Subclass_A,Subclass_B)。神奇的是使用DataTemplateSelector您的DataGrid:

<DataGrid ItemTemplateSelector="{DynamicResource GridTemplateSelector}"> 

有這一點,網格(大多數其實容器)將繪製一個項目時要求DataTemplate中,並相應地適用。

namespace MyNamespace 
{ 
    public class GridTemplateSelector : DataTemplateSelector 
    { 
     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      FrameworkElement element = container as FrameworkElement; 

      if (element != null && item != null && item is Subclass_A) 
      { 
       return element.FindResource("Subclass_A_DataTemplate") as DataTemplate; 
      } 

      if (element != null && item != null && item is Subclass_B) 
      { 
       return element.FindResource("Subclass_B_DataTemplate") as DataTemplate; 
      } 
     } 
    } 
} 
0

創建兩個DataTemplates併爲每個模板指定DataType。然後把內容放入DataGridTemplateColumn

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ContentControl Content="{Binding}"> 
         <ContentControl.Resources> 
          <DataTemplate DataType="ClassA"> 
           <Button /> 
          </DataTemplate> 
          <DataTemplate DataType="ClassB"> 
           <CheckBox /> 
          </DataTemplate> 
         </ContentControl.Resources> 
        </ContentControl> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

肯定會考驗這個明天。當前的解決方案是一個帶有按鈕和複選框的數據模板。然後,他們共享一個視圖類而不是子類,然後共享兩個反向屬性來檢查每種「實例」。使用可見性來顯示/隱藏它們。不是一個優雅的解決方案,但目前工作明天檢查你的解決方案,謝謝。 –

+0

剛試過這個。在DataGrid上我有一個ItemsSource,那麼我應該在中寫什麼? –

+0

只是'{綁定}' – Snowbear

相關問題