2012-11-08 2 views
1

바인딩 문제를 해결하는 데 도움이됩니다. poject는 WPF + WAF + ef 코드를 먼저 사용합니다. DataGridComboBoxColumn 값을 모델 속성에 바인딩하려고하지만 작동하지 않는 것이 있습니다. 모델 :MVVM (WAF)로 WPF DataGridComboBoxColumn 바인딩

public class DocumentMove 
    { 
     [Key] 
     public Guid DocumentMoveId { get; set; } 
     public Guid RawMaterialId { get; set; } 
     public RawMaterial RawMaterial { get; set; } 
     public decimal Amount { get; set; } 
     public decimal Price { get; set; } 
    } 

public class RawMaterial 
    { 
     [Key] 
     public Guid RawMaterialId { get; set; } 
     public RawMaterialGroup Group { get; set; } 
     [MaxLength(20)] 
     public string Code { get; set; } 
     public Colour Colour { get; set; }   
     [MaxLength(100)] 
     public string Name { get; set; } 
     public Measure Measure { get; set; }   
     public List<ArrLocation> ArrLocations { get; set; }   
     public List<RawMove> RawMoves { get; set; } 
     public Delivery Supplier { get; set; } 
     public RawMaterial() 
     {    
     } 
} 

그리드 :

<DataGrid x:Name="documentMoveTable" AutoGenerateColumns="False" ItemsSource="{Binding DocumentMoves}" 
     SelectedItem="{Binding SelectedDocumentMove}" CanUserDeleteRows="False" IsReadOnly="False" RowEditEnding="documentMoveTable_RowEditEnding"> 
     <DataGrid.InputBindings> 
      <KeyBinding Command="{Binding RemoveCommand}" Key="Del"/> 
     </DataGrid.InputBindings> 

     <DataGrid.Columns> 
      <DataGridComboBoxColumn Header="{x:Static p:Resources.RawMaterial}" 
       SelectedValueBinding="{Binding RawMaterialId}" 
       DisplayMemberPath="Name" SelectedValuePath="RawMaterialId"> 

       <DataGridComboBoxColumn.ElementStyle> 
         <Style TargetType="{x:Type ComboBox}"> 
          <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.RawMaterials}" /> 
          <Setter Property="IsReadOnly" Value="True"/> 
         </Style> 
       </DataGridComboBoxColumn.ElementStyle> 
       <DataGridComboBoxColumn.EditingElementStyle> 
         <Style TargetType="{x:Type ComboBox}"> 
          <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.RawMaterials}" /> 
         </Style> 
       </DataGridComboBoxColumn.EditingElementStyle> 
      </DataGridComboBoxColumn> 

      <DataGridTextColumn Binding="{Binding Amount, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
           ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
           Header="{x:Static p:Resources.Amount}" Width="*" ElementStyle="{StaticResource TextCellElementStyle}"/> 

      <DataGridTextColumn Binding="{Binding Price, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
           ValidatesOnExceptions=True, NotifyOnValidationError=True}" 
           Header="{x:Static p:Resources.Price}" Width="*" ElementStyle="{StaticResource TextCellElementStyle}"/> 

     </DataGrid.Columns> 
    </DataGrid> 

그리고 뷰 모델 :

[Export] 
public class EditDocumentViewModel : ViewModel<IEditDocumentView> 
{ 
    private IEnumerable<DocumentMove> _documentMoves;   
    private ICommand _removeCommand;   
    private ICommand _editListCommand; 

    public IEnumerable<DocumentMove> DocumentMoves 
    { 
     get { return _documentMoves; } 
     set 
     { 
      _documentMoves = value; 
      RaisePropertyChanged("DocumentMoves"); 
     } 
    } 

    public DocumentMove SelectedDocumentMove { get; set; } 

...

} 

그리드에 새 행을 추가하는 중에, I ComboBox 및 광고에서 값을 선택할 수 있습니다. "금액"과 "가격"에 대한 d 값. EditListCommand를 처리하는 동안 컨트롤러 측에서는 _editDocumentViewModel.SelectedDocumentMove.Amount_editDocumentViewModel.SelectedDocumentMove.Price의 값이 있지만 _editDocumentViewModel.SelectedDocumentMove.RawMaterialId_editDocumentViewModel.SelectedDocumentMove.RawMaterial 값은 비어 있습니다. 내 ComboBoxColumn 바인딩에있는 뭔가 잘못 생각하거나 뭔가있을 수 있습니다?

몇 가지 유사한 질문이 있습니다. 1, 2이지만 캔트 방법을 찾을 수 없습니다.

도와주세요. 제 영어는 유감 스럽습니다.

답변

0

매개 변수 UpdateSourceTrigger=PropertyChanged ~ SelectedValueBinding="{Binding RawMaterialId}"을 추가하고 작동 중!