2015-06-09 19 views
10

Ho una vista che visualizza una parte. Tutte le parti contengono un elenco di identificatori. Nella mia vista visualizzo Proprietà parte e un DataGrid con tutti gli identificatori di quella parte.Aggiorna cella DataGrid se altre celle cambiano

Ora se cambio un valore di un identificatore, voglio un altro aggiornamento del valore predefinito. Ma se cambio il mio valore identificativo e imposto il valore predefinito dell'altra proprietà, il mio DataGrid non si aggiorna. Solo se clicco sulla cella, viene aggiornato dopo aver perso lo stato attivo.

Come posso aggiornare automaticamente la vista?

Credo che il problema è che non voglio aggiornare una proprietà diretta della parte, ma una proprietà in un elenco che è una proprietà della parte.

View

<DataGrid> 
    <DataGridTemplateColumn Header="Company"> 
     <DataGridTemplateColumn.CellEditingTemplate> 
      <DataTemplate> 
        <ComboBox x:Name="CompanyEditComboBox" 
          ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Companies}" 
          SelectedItem="{Binding Company, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
          SelectionChanged = "CompanyEditComboBox_SelectionChanged" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellEditingTemplate> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Company}" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 


    <DataGridTemplateColumn Header="CompanyType"> 
     <DataGridTemplateColumn.CellEditingTemplate> 
       <DataTemplate> 
        <ComboBox x:Name="CompanyTypeEditComboBox" 
             ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.CompanyTypes}" 
             SelectedItem="{Binding IdentificationCompanyType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
       <TextBlock Text="{Binding IdentificationCompanyType, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
</DataGrid> 

Visualizza codice sottostante

private void CompanyEditComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var vm = (PartViewModel)DataContext; 
    var box = (ComboBox) sender; 
    var c = (Company) box.SelectedItem; 
    vm.SetDefaultCompanyType(c); 
} 

ViewModel

public void SetDefaultCompanyType(Company c) 
{ 
    SelectedIdentification.IdentificationCompanyType = c.DefaultCompanyType; 
    OnPropertyChanged("IdentificationCompanyType"); 
} 
+1

Sto cercando di capire la tua domanda qui, quindi quando selezioni una 'Company' diversa, allora dovresti selezionare il valore di default' CompanyType' nella riga selezionata di 'DataGrid'? – XAMlMAX

+0

Sì, esattamente ... –

+0

ottimo, ora se il 'CompanyType' non viene modificato rispetto all'impostazione predefinita, verrà salvato come predefinito. Se si fa affidamento solo sul testo effettivo della casella combinata, si tratta di una soluzione semplice, ma se si richiede l'intero oggetto, è necessario impostare il "SelectedItem" sottostante di tale ComboBox altrimenti quando si desidera salvarlo verrà utilizzato il valore "Binding" . Se ciò ha senso? – XAMlMAX

risposta

5

risolto. Ho dovuto aggiungere un

OnPropertyChanged("IdentificationCompanyType"); 

nel setter del IdentificationCompanyType nella classe Identification. Successivamente è stato aggiornato automaticamente in DataGrid.

+6

Se il problema è risolto, è necessario contrassegnarlo come risposta. –

Problemi correlati