2017-11-02 5 views
0

私はWPFを使用してチェスゲームを作成しています。私は選択されたセル(行/列)のインデックスを取得する必要があります。SelectionChanged WPFを発射しない

XAML:

<DataGrid Name ="chessGrid" 
      AutoGenerateColumns="False" 
      HeadersVisibility="None" 
      SelectionMode="Single" 
      SelectionUnit="Cell" 
      CanUserAddRows="False" 
      CanUserDeleteRows="False" 
      CanUserReorderColumns="False" 
      CanUserResizeColumns="False" 
      CanUserResizeRows="False" 
      CanUserSortColumns="False" 
      CurrentCellChanged="chessGrid_CurrentCellChanged" 
      SelectionChanged="chessGrid_SelectionChanged"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[0]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[1]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[2]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[3]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[4]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[5]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[6]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[7]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[8]}" /> 
     <DataGridTextColumn Width="*" Binding="{Binding columns[9]}" /> 
    </DataGrid.Columns> 

セルは、私が呼んで変更されました:

private void chessGrid_CurrentCellChanged(object sender, System.EventArgs e) 
{ 
    x = chessGrid.CurrentCell.Column.DisplayIndex; 
    Debug.WriteLine(x); 
} 

私は、セルの列インデックスを取得することができます。

と私は現在、試してみてください。

private void chessGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    y = chessGrid.SelectedIndex; 
    Debug.WriteLine(y); 
} 

行を取得します。しかし、これは動作しません。SelectionUnit = "Cell"を削除すると上のように動作しますが、行全体を選択できないようにしてください。私も試しました:

これは、yを-1に設定していますか?

私の質問は、単純なWPFとデータグリッドを使って、選択したセルの行/列インデックスを取得する方法です。

EDIT:アプリケーションで3層アーキテクチャを使用する必要があります。

+0

。バインディングとMVVMについて読む。 – Kostya

+0

@ KostyaK 3層アーキテクチャを使用してアプリケーションを記述しなければならないことを忘れていましたが、MVVMはそれに対応していないと思います – Tagor

+1

@Tagorデータアクセス、ビジネスロジック、およびプレゼンテーションレイヤーを分離する場合は、MVVMを使用します。それ以外の方法でWPFを使用するのは苦痛で困難です。 –

答えて

0

これを試してください:あなたはそれが間違ってやっている

private void dggg_CurrentCellChanged(object sender, EventArgs e) 
{ 
    x = chessGrid.CurrentCell.Column.DisplayIndex; 
    y = chessGrid.Items.IndexOf(chessGrid.CurrentCell.Item); 
} 
+0

@Tagor:役に立つ回答を投票してください。https://stackoverflow.com/help/someone-answers – mm8

関連する問題