2

セットアップ

  • カスタムタイプ (「前のドキュメント」) のリストを保持し、それらにバインドする DataGrid があります。その部分は正しく機能します。
  • SelectedItemPropertyViewModel のプロパティにデータグリッドをバインドしました。CurrentlySelectedPreviousDocument
  • というコマンドにバインドされたデータグリッドの左クリック アクションがあります。OpenPreviousDocumentCommand
  • OpenPreviousDocumentCommandと呼ばれるメソッドを実行しますOpenSelectedPreviousDocument()
  • OpenSelectedPreviousDocument()プロパティを使用してCurrentlySelectedPreviousDocument、ファイルを一時ディレクトリにコピーし、開きます。

問題

  • このコードは機能しますが、データグリッドの最初の項目をクリックした場合のみです。
  • データ グリッド内の他のすべての項目について、CurrentlySelectedPreviousDocument が null として表示されているように見えるため、すべてのプロパティが null です。

問題の説明に役立つその他のシナリオ:

  • アプリケーションをロードすると、行が選択されません。
  • 任意の時点で最初のアイテムをダブルクリックすると、他のアイテムをクリックしてエラーが表示された後でも、そのアイテムが開きます。
  • 2 番目または 3 番目の項目を最初にダブルクリックすると、エラーが発生します。
  • 最初のドキュメントをダブルクリックして開き、別の行をシングルクリックして選択されていることを確認し、別の行をダブルクリックしても、エラーが発生します。
  • 最初のドキュメントをダブルクリックして開き、問題のある行の 1 つをクリックするとエラーが発生し、最初の行をもう一度クリックしても機能します。

これまでに試したこと:

  • bingding モードを TwoWay に更新する
  • UpdateSourceTrigger = PropertyChanged の追加
  • 出力ウィンドウを確認しました。無効なバインディングは検出されませんでした。

コード

XAML DataGrid バインディング:

<DataGrid 
    x:Name="PreviousDocumentsDataGrid"
    ItemsSource="{Binding PreviousDocumentsList}" 
    SelectedItem="{Binding CurrentlySelectedPreviousDocument, Mode=OneWayToSource}" 
    SelectionMode="Single"
    SelectionUnit="FullRow" 
    AutoGenerateColumns="False" 
    IsReadOnly="True" 
    HorizontalGridLinesBrush="LightGray" 
    VerticalGridLinesBrush="LightGray" 
    BorderBrush="Transparent" 
    Visibility="{Binding PreviousDocumentsFound, Converter={StaticResource BoolToVisConverter}}">
    <DataGrid.InputBindings>
        <MouseBinding Gesture="LeftDoubleClick" Command="{Binding OpenPreviousDocumentCommand}"/> 
    </DataGrid.InputBindings>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridTextColumn Header="Reference Type" Binding="{Binding ReferenceType}"/>
        <DataGridTextColumn Header="Category ID" Binding="{Binding Category}"/>
        <DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
        <DataGridTextColumn Header="Document Timestamp" Binding="{Binding Timestamp}"/>
    </DataGrid.Columns>
</DataGrid>

CurrentSelectedPreviousDocument の ViewModel 定義:

public VEDocument CurrentlySelectedPreviousDocument
{
    get { return _currentlySelectedPreviousDocument; }
    set { _currentlySelectedPreviousDocument = value;
    OnPropertyChanged("CurrentlySelectedPreviousDocument");} //TODO: Is the on propertychanged actually necessary here?
}

コマンド定義:

public ICommand OpenPreviousDocumentCommand
{
    get
    {
        return _openPreviousDocumentCommand ??
               (new CommandHandler(OpenSelectedPreviousDocument, _canExecuteCommands));
    }
}

ドキュメントを開く ViewModel のメソッド (viewmodel プロパティを使用)

public void OpenSelectedPreviousDocument()
{
    var docToOpen = CurrentlySelectedPreviousDocument;
    ...etc. etc.
}
4

1 に答える 1