DataGridComboBoxColumn ячейка не отображает выбранный текст элемента? - PullRequest
4 голосов
/ 29 июня 2011

Мне было интересно, как вы получаете DataGridComboBoxColumn для отображения текста выбранного элемента, когда он не находится в режиме редактирования?А также возможно ли сделать так, чтобы поле со списком в режиме редактирования первоначально отображало текст выбранного элемента?

Вот мой XAML:

<DataGridComboBoxColumn Header="Formatter" 
                        SelectedItemBinding="{Binding Path=Format}">
  <DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="">
      <Setter Property="Text" Value="{Binding Path=FormatView.Name}" />
    </Style>
  </DataGridComboBoxColumn.ElementStyle>
  <DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="ComboBox">
      <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
      <Setter Property="IsDropDownOpen" Value="True" />
      <Setter Property="ItemTemplate">
        <Setter.Value>
          <DataTemplate>
            <TextBlock Text="{Binding Path=Name}"></TextBlock>
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

Ответы [ 3 ]

6 голосов
/ 02 февраля 2012

Это был единственный ресурс на DataGridComboBoxColumn, который я нашел полезным:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcomboboxcolumn.aspx

Все остальное (что я нашел на сайтах не-MSDN) было вводящим в заблуждение !

3 голосов
/ 04 июля 2011

Хорошо, я понял это после долгих поисков.

но кажется, что вы просто делаете то же самое для ElementStyle, опять же с целевым типом комбинированного окна, даже если оно не показывает ComboBox, когда не редактируется.

<DataGridComboBoxColumn Header="Formatter" SelectedItemBinding="{Binding Path=Format}">
        <DataGridComboBoxColumn.ElementStyle>
            <Style TargetType="ComboBox">
                <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
                <Setter Property="IsDropDownOpen" Value="True" />
                <Setter Property="ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Name}"></TextBlock>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGridComboBoxColumn.ElementStyle>
        <DataGridComboBoxColumn.EditingElementStyle>
            <Style TargetType="ComboBox">
                <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
                <Setter Property="IsDropDownOpen" Value="True" />
                <Setter Property="ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Name}"></TextBlock>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGridComboBoxColumn.EditingElementStyle>
    </DataGridComboBoxColumn>
0 голосов
/ 29 июня 2011

Я в растерянности, но, возможно, попробуйте следующее: Удалите ElementStyle и вместо этого установите DisplayMemberPath, например ::100100

<DataGridComboBoxColumn Header="Formatter" SelectedItemBinding="{Binding Path=Format}" DisplayMemberPath="Name">

Путь также может быть FormatView.Name, у меня нет четкого представления о вашей структуре данных. А как вы установили ItemsSource вашего DataGridComboBoxColumn?

...