2013-06-25 2 views
0

У меня есть класс, который содержит в себе список других классов, и я хочу, чтобы иметь возможность использовать этот список в качестве источника элементов для datagrid в WPF. Возможно ли, чтобы внутренний список других классов появлялся в выпадающем списке или выпадающем списке. Я мог бы просто показать другую подформу, когда пользователь нажимает на столбец, содержащий коллекцию, но было бы более элегантно, если бы я мог просто увидеть и отредактировать коллекцию на месте в основной сетке.Показать список списков в datagrid с WPF

Это то, что мой класс выглядит следующим образом:

private string ChainID = string.Empty; 
    private string Chain = string.Empty; 
    private string State = string.Empty; 
    private string NonMerchID = string.Empty; 
    private string ReceiptText = string.Empty; 
    private string Amount = string.Empty; 
    **private List<string> CT1 = new List<string>(5);** 
    private string RecyclingFeeFlag = string.Empty; 
    private string MinPrompt = string.Empty; 
    private string MaxPrompt = string.Empty; 

СТ1, где моя проблема.

Итак, мой XAML теперь выглядит следующим образом:

<DataGrid AutoGenerateColumns="False" Height="289" HorizontalAlignment="Left" Margin="10,10,0,0" Name="dataGrid1" VerticalAlignment="Top" 
       Width="481" ItemsSource="{Binding nonMerchData}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Chain ID" Binding="{Binding Path=chainID}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Chain" Binding="{Binding Path=chain}"></DataGridTextColumn> 
      <DataGridTextColumn Header="State" Binding="{Binding Path=state}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Non Merch ID" Binding="{Binding Path=nonMerchID}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Receipt Text" Binding="{Binding Path=receiptText}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Amount" Binding="{Binding Path=amount}"></DataGridTextColumn> 
      <DataGridComboBoxColumn Header="CT" x:Name="_CT"></DataGridComboBoxColumn> 
      <DataGridTextColumn Header="Recycling Fee Flag" Binding="{Binding Path=recyclingFeeFlag}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Min Prompt" Binding="{Binding Path=minPrompt}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Max Prompt" Binding="{Binding Path=maxPrompt}"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

Это все работает отлично, за исключением я не могу понять, как связать свой внутренний список в столбце COMBOX.

+1

Опубликовать соответствующий XAML. –

+0

В дополнение к комментарию @ HighCore вы пробовали DataGridComboBoxColumn? Кажется естественным кандидатом –

ответ

0

Ошибка в архитектуре. Я объясняю: роль ComboBox - это отображать список выбора, поэтому один для выбора, это приводит к тому, что список должен быть предоставлен вне вашего объекта. Но здесь вы хотите отображать/редактировать то, что находится внутри списка CT1, в ComboBox. Я думаю, что это не поможет вам, если вы не перейдете на DataGridTemplateColumn, хотя даже это решение не лучшее для вас.

<DataGridTemplateColumn Header="template"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding Path=CT1}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate>        
</DataGridTemplateColumn>