0

次のように定義すると機能する単純なdatatgridがあります。

    <DataGrid             
        ItemsSource="{Binding EmployeeCollectionViewSource.View}"        
        Style="{DynamicResource FTC_DataGridStyle}" AutoGenerateColumns="True" />

AutoGenerateColumns = "True"を削除し、列を次のように定義しようとすると、エラーが発生します。

     <DataGrid             
        ItemsSource="{Binding EmployeeCollectionViewSource.View}"        
        Style="{DynamicResource FTC_DataGridStyle}" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding idCertification}" Header="ID" Width="50" IsReadOnly="True" CellStyle="{DynamicResource IDCellStyle}"/>
            <DataGridTextColumn Binding="{Binding chrTitle}" Header="TITLE" Width="130" CellStyle="{DynamicResource TextCellStyle}"/>
            <DataGridTextColumn Binding="{Binding chrDetail}" Header="DETAIL" Width="300" CellStyle="{DynamicResource TextCellStyle}"/>
            <DataGridTextColumn Binding="{Binding chrProvider}" Header="PROVIDER" Width="130" CellStyle="{DynamicResource TextCellStyle}"/>
        </DataGrid.Columns> />
    </DataGrid>

私が得るエラーは次のとおりです。

{"'タイプ'System.Windows.Controls.ItemCollection'のコレクションに値を追加すると例外がスローされました。行番号「31」および行位置「32」。"}{"ItemsSourceの使用中は操作が無効です。代わりにItemsControl.ItemsSourceを使用して要素にアクセスおよび変更してください。"}

私はMVVMパターンを使用しており、EmployeeCollectionViewSourceのバインディングは、エンティティframemowrkから生成されたObservableCollectionから入力されるcollectionviewsourceです。

列を削除してバインディング名を再確認しましたが、このエラーの原因がわかりません。出力ウィンドウにエラーは表示されません。

質問 列を手動で定義できるように、このエラーを解決するのを手伝ってもらえますか?

追加 の詳細:以下は私のviewmodelクラスです:

    Public Class EmployeeCertificationViewModel
        Inherits ViewModelBase

#Region "DECLARATIONS"

        Public Const CertificationCollectionPropertyName As String = "EmployeeCertifications"
        Public Const EmployeeCollectionViewSourcePropertyName As String = "EmployeeCollectionViewSource"

        ''this is a holder for the employee data service
        Private _EmployeeAccess As IEmployeeDataService

        Private _EmployeeCertifications As New ObservableCollection(Of certification)
        Private _EmployeeCollectionViewSource As New CollectionViewSource

        ''tracks if employee validation is coming from navigation or listview selecteditemchanged
        Private FlagNavigating As Boolean = False
        Private _NavigationService As INavigationService

        Private _ModelService As IModelService
        Private Context As FTC_Context

#End Region

#Region "PROPERTIES"

        Public Property EmployeeCertifications As ObservableCollection(Of certification)
            Get
                Return Me._EmployeeCertifications
            End Get
            Set(ByVal value As ObservableCollection(Of certification))
                Me._EmployeeCertifications = value
                RaisePropertyChanged(CertificationCollectionPropertyName)
            End Set
        End Property

        Public Property EmployeeCollectionViewSource As CollectionViewSource
            Get
                Return Me._EmployeeCollectionViewSource
            End Get
            Set(value As CollectionViewSource)
                If _EmployeeCollectionViewSource Is value Then
                    Return
                End If
                _EmployeeCollectionViewSource = value
                RaisePropertyChanged(EmployeeCollectionViewSourcePropertyName)
            End Set
        End Property


#End Region

#Region "COMMANDS"

#End Region

#Region "METHODS"

#End Region

#Region "CONSTRUCTOR"
        Public Sub New(NavService As INavigationService, EmployeeService As IEmployeeDataService, ModelService As IModelService)

            _ModelService = ModelService
            Context = _ModelService.NewContext

            _NavigationService = NavService
            _EmployeeAccess = EmployeeService

            EmployeeCertifications = EmployeeService.Get_Certification(Context)
            EmployeeCollectionViewSource.Source = EmployeeCertifications

        End Sub

#End Region

    End Class
4

1 に答える 1

4

DataGrid.AutoGenerateColumnsプロパティはデフォルトでtrueです。独自の列を定義する場合は、明示的にfalseに設定する必要があります。それ以外の場合は、両方の列タイプ(自動生成および独自定義)が同時に発生します。

<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        ...
    </DataGrid.Columns>
</DataGrid>

しかし、あなたの本当の問題はあなたのコードの/>後の追加であるようです。</DataGrid.Columns>それを削除すると、例外はなくなります。

于 2013-03-18T23:51:43.660 に答える