У меня есть представление, которое отображает часть. Все части содержат список идентификаторов. В моем представлении я показываю свойства детали и 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>
Просмотр кода позади
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");
}