前提・実現したいこと
実現したいこと
列3の入力が確定した時点で 列4、5の値を参照して
入力値が範囲内ならOK、範囲外ならエラーとして
そのセルからフォーカス移動をさせない
出来ていること
マウスで選択した場合、選択したセルの値と
列4,5の値の取得まで
知りたいこと
上記の状態からセルのマウス選択ではなく、セルの入力完了で連携をさせたいのですが
その方法がわかりませんでした。
アドバイス等よろしくお願いします。
現在のソースコード
MainWindow.xaml
<Window x:Class="WPFGetDataGridCell.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFGetDataGridCell" mc:Ignorable="d" Title="MainWindow" Height="300" Width="600" > <Grid> <DataGrid Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" IsReadOnly="True" SelectionMode="Single" SelectionUnit="Cell" MouseLeftButtonDown="DataGrid_MouseLeftButtonDown"/> </Grid> </Window>
MainWindow.xaml.cs
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFGetDataGridCell { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // データグリッドに5列設定 for (int i = 0; i < 5; ++i) { //追加する列はテキストカラムとしてます。 var column = new DataGridTextColumn(); column.Header = $"{i}"; column.Binding = new Binding($"[{i}]"); dataGrid.Columns.Add(column); } // データグリッドに3行設定 var row1 = new string[] { "あああ", "AAAAAA", "0", "0", "90" }; var row2 = new string[] { "いいい", "BBBBBB", "0", "0", "91" }; var row3 = new string[] { "ううう", "CCCCCC", "0", "0", "92" }; var rows = new List<object>(); rows.Add(row1); rows.Add(row2); rows.Add(row3); dataGrid.ItemsSource = rows; } private void DataGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var dataGrid = sender as DataGrid; // 行位置を取得します。 var rowIndex = dataGrid.Items.IndexOf(dataGrid.CurrentItem); // 列位置を取得します。 var columnIndex = dataGrid.CurrentCell.Column.DisplayIndex; var row = dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex) as DataGridRow; var cell = dataGrid.Columns[columnIndex].GetCellContent(row); var cellMin = dataGrid.Columns[3].GetCellContent(row); var cellMax = dataGrid.Columns[4].GetCellContent(row); // セルのテキストブロックキャスト var textBlock = cell as TextBlock; var textBlockMin = cellMin as TextBlock; var textBlockMax = cellMax as TextBlock; //全セル値の表示 MessageBox.Show("入力値="+ textBlock.Text +" 最小値="+ textBlockMin.Text + " 最大値=" + textBlockMax.Text); } } }
補足情報(FW/ツールのバージョンなど)
環境: Win10 、VS2019、C#
フレームワーク:なし