바인딩 문제를 해결하는 데 도움이됩니다. 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이지만 캔트 방법을 찾을 수 없습니다.
도와주세요. 제 영어는 유감 스럽습니다.