2014-12-27 4 views
0

Я просто хочу сделать простую вещь, я просто хочу показать свой список версий в combobox в datagrid.DataGridComboBoxColumn не отображает мою коллекцию

В колонке «Версии» отображаются «Коллекции» ... и я не знаю почему!

Вот код в моем XAML:

<DataGrid Name="DataGridTableau" Grid.Column="0" Grid.Row="0" 
        AutoGenerateColumns="False" 
       ScrollViewer.CanContentScroll="True" 
       ScrollViewer.VerticalScrollBarVisibility="Auto" 
       ScrollViewer.HorizontalScrollBarVisibility="Auto" CanUserAddRows="True" 
       ItemsSource="{Binding }" 
      > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Sofware" Width="*" IsReadOnly="True" Binding="{Binding Path=Software}"> 
       </DataGridTextColumn> 
       <DataGridComboBoxColumn Header="Version" Width="*" IsReadOnly="True" 
         ItemsSource="{Binding Path=Versions}"> 
       </DataGridComboBoxColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

И в xaml.cs:

public ObservableCollection<ElementTableau> Elements; 

     public VueEtapeSelection() 
     { 
      InitializeComponent(); 


      Elements = new ObservableCollection<ElementTableau>(); 
      List<string> versions = new List<string>(); 
      versions.Add("3.0"); 
      versions.Add("3.1"); 
      Elements.Add(new ElementTableau("Excel", versions)); 

      this.DataGridTableauEKs.DataContext = Elements; 
     } 

     public class ElementTableau 
     { 
      private string sofware; 

      public string Software 
      { 

       get { return software; } 
       set { software = value; } 
      } 

      private List<string> versions; 

      public List<string> Versions 
      { 

       get { return versions; } 
       set { versions = value; } 
      } 

      public ElementTableau(string software, List<string> versions) 
      { 
       this.software = software; 
this.versions=versions 

      } 
     } 

Спасибо за вашу помощь!

ответ

0

установка ItemsSource используя стиль Try:

<DataGrid.Columns> 
    <DataGridTextColumn Header="Sofware" Width="*" IsReadOnly="True" Binding="{Binding Path=Software}" /> 
    <DataGridComboBoxColumn> 
     <DataGridComboBoxColumn.ElementStyle> 
      <Style TargetType="{x:Type ComboBox}"> 
       <Setter Property="ItemsSource" Value="{Binding Path=Versions}" /> 
      </Style> 
     </DataGridComboBoxColumn.ElementStyle> 
     <DataGridComboBoxColumn.EditingElementStyle> 
      <Style TargetType="{x:Type ComboBox}"> 
       <Setter Property="ItemsSource" Value="{Binding Path=Versions}" /> 
      </Style> 
     </DataGridComboBoxColumn.EditingElementStyle> 
    </DataGridComboBoxColumn> 
</DataGrid.Columns> 

Связывание ItemsSource свойства столбца не работает, так как он оценивается в контексте самого столбца, который не имеет родительский FrameworkElement. Используя стиль вместо этого устанавливает ItemsSource, как только отображается ComboBox. ComboBox интегрирован в логическое дерево, и его DataContext можно оценить, поэтому он работает.

Edit:

Чтобы привязать выбранные элементы, добавить некоторые сеттеров, как это:

<Setter Property="SelectedItem" Value="{Binding Path=SelectedVersion}" /> 
+0

Спасибо, это работает как шарм. Но как я могу привязать выбранный элемент? Я поместил свойство в свой ElementTableau, который является «VersionSelected». Спасибо за вашу помощь – TWEESTY

+0

@TWEESTY Пожалуйста, см. Отредактированный ответ. – Frank

+0

Большое вам спасибо. Я думал, что я попробовал это решение. – TWEESTY

Смежные вопросы