2012-11-08 27 views
1

帮我解决绑定问题。该项目首先在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; } 

...

} 

虽然试图添加一个新的行格,我可以从ComboBox和广告中选择一个值d“金额”和“价格”的值。在处理EditListCommand时控制器一方存在_editDocumentViewModel.SelectedDocumentMove.Amount_editDocumentViewModel.SelectedDocumentMove.Price的值,但_editDocumentViewModel.SelectedDocumentMove.RawMaterialId_editDocumentViewModel.SelectedDocumentMove.RawMaterial的值为空。我认为我的ComboBoxColumn绑定中的某些内容是错误的,或者可能是其他内容?

我见过几个类似的问题12,但 无法找到如何解决它。

请帮忙,对不起我的英文)。

回答

0

我增加了参数UpdateSourceTrigger=PropertyChangedSelectedValueBinding="{Binding RawMaterialId}"它工作!