2015-06-09 13 views
10

Tôi có Chế độ xem hiển thị Phần. Tất cả các phần chứa danh sách số nhận dạng. Trong View của tôi, tôi hiển thị Part Properties và một DataGrid với tất cả các định danh của phần đó.Cập nhật ô DataGrid nếu các thay đổi khác của ô

Bây giờ nếu tôi thay đổi giá trị của số nhận dạng, tôi muốn cập nhật giá trị khác về giá trị mặc định. Nhưng nếu tôi thay đổi giá trị nhận dạng của tôi và đặt mặc định của thuộc tính khác - DataGrid của tôi không cập nhật. Chỉ khi tôi nhấp vào ô, sau đó nó được cập nhật sau khi mất tiêu điểm.

Làm cách nào để tự động cập nhật Chế độ xem?

Tôi đoán vấn đề là tôi không muốn cập nhật thuộc tính trực tiếp của Phần, mà là Thuộc tính trong Danh sách là tài sản của Phần.

Xem

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

Xem 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

Tôi đang cố gắng hiểu câu hỏi của bạn ở đây, vì vậy khi bạn chọn một 'Công ty' khác, sau đó nên chọn mặc định' Loại công ty' trong hàng đã chọn của 'DataGrid' của bạn? – XAMlMAX

+0

Có, chính xác ... –

+0

tuyệt vời, bây giờ nếu 'Loại công ty' không bị thay đổi mặc định, nó sẽ được lưu làm mặc định. Nếu bạn chỉ dựa vào văn bản thực tế của combobox thì đó là một sửa chữa dễ dàng nhưng nếu bạn yêu cầu toàn bộ đối tượng thì bạn cần phải thiết lập bên dưới 'SelectedItem' của ComboBox đó nếu bạn muốn lưu nó sẽ sử dụng giá trị' Binding' . Nếu điều đó hợp lý? – XAMlMAX

Trả lời

5

Giải quyết nó. Tôi đã có thêm một

OnPropertyChanged("IdentificationCompanyType"); 

vào setter của IdentificationCompanyType trong lớp Identification. Sau đó nó được cập nhật tự động trong DataGrid.

+6

Nếu vấn đề của bạn được giải quyết, bạn nên đánh dấu nó là đã trả lời. –

Các vấn đề liên quan