2

バインディングの問題を解決するのを手伝ってください。オブジェクトは、最初に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を見てきましたが、それを修正する方法を見つけることができません。

助けてください、そして私の英語をお詫びします)。

4

1 に答える 1

1

にパラメータを追加UpdateSourceTrigger=PropertyChangedしたSelectedValueBinding="{Binding RawMaterialId}"ところ、動作しました!

于 2012-11-10T16:35:43.697 に答える