データグリッドでラジオボタンが選択した行を取得したい

実現したいこと

発生している問題・エラーメッセージ

WPFのデータグリッドにラジオボタンを実装したいのですが、選択した行の取得方法がわかりません。
このサンプルではTestボタンを押した時にラジオボタンが選択している行の名前を取得しようとしましたが、出来ませんでした。

該当のソースコード

XAML

1Window x:Class="WpfRadio.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:WpfRadio" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Grid> 10 <StackPanel Orientation="Vertical"> 11 <StackPanel Orientation="Horizontal"> 12 <Button Width="100" x:Name="Test" Content="Test" Margin="10" Click="Test_Click"/> 13 <Label x:Name="LabelTest" Content="test"/> 14 </StackPanel> 15 <DataGrid ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="5" 16 Name="DG" IsReadOnly="false" AutoGenerateColumns="False" FontSize="16" 17 CanUserSortColumns="False" 18 CanUserAddRows="False" 19 CanUserDeleteRows="False" 20 CanUserResizeRows="False" 21 SelectionUnit="Cell" 22 > 23 <DataGrid.Columns> 24 <DataGridTextColumn x:Name="No" Header="No." Binding="{Binding No}"/> 25 <DataGridTextColumn x:Name="Name" Header="名前" Binding="{Binding Name}"/> 26 <!-- DataGridCheckBoxColumn x:Name="Select" Header="選択" Binding="{Binding Select}" /--> 27 <DataGridTemplateColumn Header="選択" x:Name="Temp"> 28 <DataGridTemplateColumn.CellTemplate> 29 <DataTemplate> 30 <RadioButton x:Name="Select" GroupName="sel"/> 31 </DataTemplate> 32 </DataGridTemplateColumn.CellTemplate> 33 </DataGridTemplateColumn> 34 </DataGrid.Columns> 35 </DataGrid> 36 </StackPanel> 37 </Grid> 38</Window> 39

C#

1using System;2using System.Collections.ObjectModel;3using System.Threading.Tasks;4using System.Windows;5 6namespace WpfRadio 7{8 /// <summary>9 /// MainWindow.xaml の相互作用ロジック10 /// </summary>11 public partial class MainWindow : Window 12 {13 public MainWindow()14 {15 InitializeComponent();16 DG_5();17 }18 19 // データグリッドを5行表示する20 private async void DG_5()21 {22 for(int i = 0; i < 5; i++)23 {24 PDG.Add(new ClsDG(i,"名前" + (i+1).ToString() , false));25 }26 await Task.Run(() => TaskViewGrid());27 }28 29 private void TaskViewGrid()30 {31 Dispatcher.Invoke((Action)(() =>32 {33 DG.ItemsSource = PDG;34 }));35 }36 37 ObservableCollection<ClsDG> PDG = new ObservableCollection<ClsDG>(); 38 39 private class ClsDG 40 {41 public string No { get; set; } = "";42 public string Name { get; set; } = "";43 public string Select { get; set; } = "";44 45 public ClsDG(int no,string name, bool select)46 {47 No = no.ToString();48 Name = name;49 Select = select.ToString();50 }51 }52 53 private void Test_Click(object sender, RoutedEventArgs e)54 {55 // 選択したラジオボタンの名前を表示したい56 LabelTest.Content = PDG[3].Name; // 仮で4行目の名前を表示57 }58 }59}60

補足情報(FW/ツールのバージョンなど)

.NET Framework 4.7.2

コメントを投稿

0 コメント