WPF ComboBox в DataGridTemplateColumn с альтернативным ItemsSource - PullRequest
1 голос
/ 23 марта 2011

Я знаю, что эта тема поднималась несколько раз раньше, но я пробовал способы, которые я нашел здесь, и ни одна из них, похоже, не работает.Я не знаю, потому что я использую разные источники привязки, или я просто терплю неудачу, или что ...

У меня есть DataGrid, который привязан к документу XML, считанному в память.У меня есть список, содержащий все различные значения, которые мог бы иметь один столбец, и я хочу использовать его в качестве ItemsSource для столбца ComboBox.

Мой XAML выглядит следующим образом:

<DataGrid AutoGenerateColumns="False" IsReadOnly="False"  Height="400" HorizontalAlignment="Left" Margin="125,15,0,0" x:Name="dg" VerticalAlignment="Top" Width="500">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Width="40*" Binding="{Binding Path=Element[name].Value}" />
        <DataGridTextColumn Header="Count" Width="10*" Binding="{Binding Path=Attribute[count].Value}" />

<!-- I want this to be a ComboBox in a DataGridTemplateColumn -->
        <DataGridTextColumn Header="Category" Width="25*" Binding="{Binding Path=Attribute[category].Value}" /> 

        <DataGridTextColumn Header="Image Path" Width="25*" Binding="{Binding Path=Element[image].Value}" />
    </DataGrid.Columns>
</DataGrid>

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

<entry count="1" category="someCategory">
    <name>Entry 1</name>
    <image>c:\image.png</image>
</entry>

Наконец, список, который я хочу использовать в качестве ItemsSource для ComboBoxes:

var categories = from category in xmlDoc.Root.Elements("entry") select category .Attribute("category").Value;
List<string> catList= categories .ToList<string>();

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

РЕДАКТИРОВАТЬ: Наконец-то все заработало, я сделал, как указано в принятом ответе, установил ItemsSource в ComboBox на

ItemsSource="{DynamicResource categoryList}"

, а затем просто сделал это в коде после создания нужного мне элемента списка.использовать для заполнения ComboBox:

Resources["categoryList"] = catList;

1 Ответ

0 голосов
/ 23 марта 2011

Вы должны создать DataGridTemplateColumn с CellTemplate и CellEditingTemplate. следующее должно дать вам правильное направление для начала

<DataGridTemplateColumn Header="Category" Width="100">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding YourProperty}" "/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
  <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
      <ComboBox ItemsSource="{Binding YourSource, Mode=OneTime or OneWay}"
      </ComboBox>
    </DataTemplate>
   </DataGridTemplateColumn.CellEditingTemplate>          
 </DataGridTemplateColumn>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...