L’Associazione Dati di WPF ComboBox in DataGridTemplateColumn

Ho un DataGrid e vorrei popolare una colonna che contiene una ComboBox con una dinamica ItemsSource di elementi, basati sulla riga. Ho la casella combinata visualizzare correttamente, e l’elenco corretto di elementi vengono inseriti nell’elenco, come tirato da AvailableLogFileProcessTypes di proprietà, che è un ReadOnlyCollection. Tuttavia, quando la selezione è effettuata dall’utente in combobox, il LogFileProcessType proprietà non è impostata per la selezione.

Dati:

Property LogFileDirectories, IEnumerable<LogFileData>,
LogFileData:
public LogFileProcessType LogFileProcessType{get;set;}
public ReadOnlyCollection<LogFileProcessType> AvailableLogFileProcessTypes { get; set; }

La struttura dispone attualmente di un campo di backup, e il punto di interruzione nel set di proprietà non essere colpito, quindi so che non è localizzata l’associazione di installazione. Cosa c’è di sbagliato con il mio XAML che impedisce la proprietà da impostare?

Come si può vedere, ho cercato di fissare il SelectedValue e SelectedItem in CellEditingTemplate e il CellTemplate. Non sono sicuro di quale di queste è opportuno.

 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=LogFileDirectories, UpdateSourceTrigger=PropertyChanged}"
      HeadersVisibility="Column" CanUserReorderColumns="False" CanUserAddRows="False" Margin="0,0,0,35" Grid.RowSpan="3">
<DataGrid.Columns>
    <DataGridCheckBoxColumn Header="Processed" Binding="{Binding Path=IsProcessingComplete, Mode=OneWay}" Width="70" IsReadOnly="True" />
    <DataGridTemplateColumn Header="template">
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                          SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                          ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>      
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                          SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                          ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>                            
    </DataGridTemplateColumn>                        
</DataGrid.Columns>                    
</DataGrid>
InformationsquelleAutor Stealth Rabbi | 2011-06-01



2 Replies
  1. 6

    Vedere Damasco risposta per il processo di pensiero.

    Necessario Specificare UpdateSourceTrigger su CellTemplate /CelLEditTemplate. Questo innesca la modifica della proprietà.

     <DataGridTemplateColumn Header="template">
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                          ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>      
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox SelectedValue="{Binding Path=LogFileProcessType, UpdateSourceTrigger=PropertyChanged}"
                          ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>                            
    </DataGridTemplateColumn>  
  2. 4

    Tenta di aggiungere questo al tuo ComboBox :

    <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                              SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                              ItemsSource="{Binding Path=AvailableLogFileProcessTypes, UpdateSourceTrigger=PropertyChanged}"/>

    Quindi, con un UpdateSourceTrigger set di PropertyChanged, ogni volta che l’oggetto AvailableLogFileProcessTypes cambierà e chiamare OnPropertyChanged, il ItemsSource sarà aggiornato.

    • Il mio problema è che quando la selezione della casella combinata è stato modificato dall’utente, LogFileProcessType non è cambiato nel backup dei dati oggetto. Mi trovo bene su AvailableLogFileProcessTypes. Questo elenco non cambia quando LogFileProcessType modifiche.
    • Il mio male, non ho capito bene. Si potrebbe aggiungere un po ‘ di dettagli su come gli oggetti sono organizzati? Dove è esattamente LogFileProcessType nella gerarchia?
    • Ho aggiunto la sezione di dati. Io ti do un +1 quando mi hai fatto la cosa giusta. Vedere modifica.

Lascia un commento