2015-06-09 6 views
10

У меня есть вид, который отображает часть. Все части содержат список идентификаторов. В моем представлении я показываю свойства детали и DataGrid со всеми идентификаторами этой части.Обновить ячейку DataGrid, если другие изменения ячейки

Теперь, если я изменяю значение идентификатора, я хочу, чтобы другое значение обновлялось по умолчанию. Но если я изменил значение своего идентификатора и установил значение по умолчанию другого свойства - мой DataGrid не обновляется. Только если я нажимаю на ячейку, то она обновляется после потери фокуса.

Как я могу автоматически обновить представление?

Я думаю, проблема в том, что я не хочу обновлять прямое свойство Части, но свойство в списке, которое является свойством Части.

Посмотреть

<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> 

View Code-Behind

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

Я пытаюсь понять ваш вопрос здесь, поэтому, когда вы выбираете другую «компанию», тогда следует выбрать по умолчанию «CompanyType» в выбранной строке вашего «DataGrid»? – XAMlMAX

+0

Да, точно ... –

+0

отлично, теперь, если 'CompanyType' не изменен по умолчанию, он будет сохранен как стандартный. Если вы полагаетесь только на фактический текст combobox, тогда это простое исправление, но если вам нужен весь объект, тогда вам нужно установить базовый 'SelectedItem' этого ComboBox, иначе, когда вы хотите его сохранить, будет использоваться значение' Binding' , Если это имеет смысл? – XAMlMAX

ответ

5

решаемые его. Я должен был добавить

OnPropertyChanged("IdentificationCompanyType"); 

в инкубаторе в IdentificationCompanyType в Identification классе. После этого он автоматически обновляется в DataGrid.

+6

Если ваша проблема решена, вы должны пометить ее как ответ. –

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