私は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層アーキテクチャを使用する必要があります。
。バインディングとMVVMについて読む。 – Kostya
@ KostyaK 3層アーキテクチャを使用してアプリケーションを記述しなければならないことを忘れていましたが、MVVMはそれに対応していないと思います – Tagor
@Tagorデータアクセス、ビジネスロジック、およびプレゼンテーションレイヤーを分離する場合は、MVVMを使用します。それ以外の方法でWPFを使用するのは苦痛で困難です。 –