バインディングの問題を解決するのを手伝ってください。オブジェクトは、最初にWPF + WAF +efコードにあります。DataGridComboBoxColumn値をmodelsプロパティにバインドしたいのですが、何かが機能していません。モデル:
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>
そしてViewModel:
[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から値を選択し、「Amount」と「Price」の値を追加できます。EditListCommandの処理中のコントローラー側では、_editDocumentViewModel.SelectedDocumentMove.Amount
と_editDocumentViewModel.SelectedDocumentMove.Price
の値は存在しますが、_editDocumentViewModel.SelectedDocumentMove.RawMaterialId
との値_editDocumentViewModel.SelectedDocumentMove.RawMaterial
は空です。ComboBoxColumnバインディングの何かが間違っていると思いますか、それとも他の何かである可能性がありますか?
私はいくつかの同様の質問1、2を見てきましたが、それを修正する方法を見つけることができません。
助けてください、そして私の英語をお詫びします)。