2014-10-16 5 views
0

У меня есть DataGrid с двумя столбцами. Один из них - DataGridTextColumn, другой - DataGridComboBoxColumn. Оба привязаны к свойству и доступны для редактирования. Поэтому, когда я меняю выбор ComboBox и затем нажимаю на какое-то белое пространство, ячейка показывает правильный выбор. Но если я нажимаю на TextColumn рядом с ним, ComboBox выходит из режима редактирования и сбрасывает выделение до того, что было выбрано ранее.Выбор ComboBox в DataGrid сбрасывается при нажатии на другой столбец

Почему это происходит и что я могу сделать, чтобы этого не произошло?

+0

Можете ли вы опубликовать код WPF для DataGridComboBoxColumn? Могу быть в состоянии помочь, если мы это увидим. –

ответ

0

Поскольку вы еще не отправили свой код, я делаю предположения относительно вашей проблемы.

  1. Необходимо указать режим TwoWay в вашем DataGrid.
  2. Вы должны связать свойство SelectedValueBinding в вашем DataGridComboBoxColumn

    <DataGridComboBoxColumn x:Name="DropDownComboBox" SelectedValueBinding="{Binding Path=FieldFromData}" Header="SomeName" IsReadOnly="False"/> 
    

В коде определить содержимое ComboBox.

DropDownComboBox.ItemsSource = Enum.GetValues(typeof(ValuesPossible)); 

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

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

<DataGrid ..<properties>.. ItemsSource="{Binding DataCollection,Mode=TwoWay}" /> 
0
<DataGridTemplateColumn Visibility="Visible" Header="Reason Id" Width="250"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <ComboBox x:Name="" SelectedValue="{Binding TypeId}" SelectedValuePath="TypeId" DisplayMemberPath="Type" 
                ItemsSource="{Binding TypeItems}" ></ComboBox> 
           </StackPanel> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
+0

Немного объяснений было бы хорошо. – theoretisch

0

Проверьте столбцы DataPropertyName свойств. У меня была аналогичная проблема. «Тип» никогда не устанавливался. Код вводился дважды, но неправильно во второй раз.

Некорректное:

grcLocMill2Code.DataPropertyName = "MillCodeId";

grcLocMill2Code.DataPropertyName = "MillTypeId";

Правильно:

grcLocMill2Code.DataPropertyName = "MillCodeId";

grcLocMill2Type.DataPropertyName = "MillTypeId";

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