如果其他单元格更改,则更新DataGrid单元格

时间:2015-06-09 19:58:20

标签: c# wpf mvvm datagrid

我有一个显示部件的视图。所有部分都包含标识符列表。在我的视图中,我显示了Part Properties和一个包含该部分所有标识符的DataGrid。

现在,如果我更改标识符的值,我希望将其他值更新为默认值。但是,如果我更改我的标识符值并设置其他属性的默认值 - 我的DataGrid不会更新。只有当我点击单元格时,它才会在失去焦点后得到更新。

如何自动更新视图?

我想问题是我不想更新Part的直接属性,而是更新List中属于Part属性的属性。

查看

<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);
}

视图模型

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

1 个答案:

答案 0 :(得分:5)

解决了它。我不得不添加一个

OnPropertyChanged("IdentificationCompanyType");

进入IdentificationCompanyTypeIdentification的setter。之后,它在DataGrid中自动更新。