2017-08-09 10 views
0

Ich habe versucht, DataGridComboBoxColumn zu DataGridTemplateColumn ohne Erfolg zu ändern.WPF DataGrid Combobox Bindung

Die DataGridComboBoxColumn funktioniert wie erwartet, aber die Combobox in DataGridTemplateColumn ist nicht. Wenn ich einen Wert in dieser Combobox ändere, werden alle sichtbaren Comboboxenwerte in allen sichtbaren Zeilen geändert.

Was fehlt mir?

Datagrid ist wie folgt:

<DataGrid x:Name="bookDataGrid" 
         AutoGenerateColumns="False" 
         EnableRowVirtualization="True" 
         ItemsSource="{Binding Source={StaticResource bookViewSource}}"> 

Die DataGridComboboxColumn wie folgt aus:

    <DataGridComboBoxColumn x:Name="countryColumn" 
             ItemsSource="{Binding Source={StaticResource countryLookup}}" 
             DisplayMemberPath="CountryName" 
             SelectedValuePath="ID" 
             SelectedValueBinding="{Binding Country,UpdateSourceTrigger=PropertyChanged}" 
             Header="Country" 
             Width="SizeToCells" /> 

Es verwendet wird, um das Land (ID) in Bücher Tabelle zu setzen. Ich verwende CollectionViewSource für Bücher (bookViewSource) und Land (countryLookup).

Die nicht DataGridTemplateColumn wie diese Arbeit:

    <DataGridTemplateColumn x:Name="CountryTemplateColumn"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <ComboBox x:Name="CountryCombo"            
              ItemsSource="{Binding Source={StaticResource countryLookup}}" 
              DisplayMemberPath="CountryName" 
              SelectedValuePath="ID" 
              SelectedValue="{Binding Country, Source={StaticResource bookViewSource}, UpdateSourceTrigger=PropertyChanged}"> 
           </ComboBox> 
          </StackPanel> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

Bitte um Hilfe. Vielen Dank.

Antwort

0

Dies löste mein Problem:

hinzufügen IsSynchronizedWithCurrentItem = "False" auf die Combobox in der Datagridtemplatecolumn und entfernen Sie den Source = {Static bookViewSource} als mm8 vorgeschlagen.

0

entfernen Source={StaticResource bookViewSource}:

<ComboBox x:Name="CountryCombo"            
       ItemsSource="{Binding Source={StaticResource countryLookup}}" 
       DisplayMemberPath="CountryName" 
       SelectedValuePath="ID" 
       SelectedValue="{Binding Country, UpdateSourceTrigger=PropertyChanged}"> 
</ComboBox> 
+0

Entfernt, aber ... Ich bekomme zusätzliche Probleme: Es ändert sich auch die Datenbank für die sichtbaren Zeilen. Das heißt: Wenn ich ein Land für die erste Zeile wähle, ändert sich das Land für die sichtbaren Zeilen in der Datenbank! – Prodromos

+0

Ihre Book-Entitätsklasse sollte eine Country-Eigenschaft haben, die die ID der aktuell ausgewählten Eigenschaft des Buchs enthält. Diese Eigenschaft wird festgelegt, wenn Sie ein Element in der Datenbank auswählen. – mm8

+0

Ja das ist richtig. Es hat eine Country-Eigenschaft, die die aus der Combobox ausgewählte ID ist. Das seltsame ist, dass die DataGridComboboxColumn funktioniert gut. Aber das Tamplatecumumn ist nicht! – Prodromos