質問させていただきます。
WPFのデータグリッドを用いて、その中にテンプレートでコンボボックスを配置したUIを作成しようと考えています。
参考にしているサイトは下記です。(他にも一部サイトを参考にしています)
https://www.doraxdora.com/blog/2017/10/14/post-2818/
上記の性別を示すコンボボックスの設置まではできたのですが、このコンボボックスが、Windowが起動した時の初期値の設定方法と、行毎にこのコンボボックスのSelectedIndexを動的にC#で指定する方法が分かりません。
厳密に言うと、行を挿入した時にSelectedIndexを指定するのが理想です。
現在の私のコードは下記の状態です。
[xaml]
XAML
1<Window x:Class="system_test_project.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:WpfApp1" 7 xmlns:local1="clr-namespace:system_test_project" 8 xmlns:a="clr-namespace:system_test_project" 9 mc:Ignorable="d" 10 Title="一覧" Height="350" Width="530" 11 BorderThickness="1"> 12 13<Grid> 14<DataGrid Name="dataGrid" 15 AutoGenerateColumns="False" 16 CanUserAddRows="False"> 17 <DataGrid.Columns> 18 <!--↓1列目↓--> 19 <DataGridTemplateColumn Header="金額(税率)"> 20 <DataGridTemplateColumn.CellTemplate> 21 <DataTemplate> 22 <StackPanel Orientation="Horizontal"> 23 <TextBlock Text="{Binding Price, StringFormat={}{0} 円}"/> 24 <TextBlock Text="{Binding Tax, StringFormat=({0}%)}"/> 25 </StackPanel> 26 </DataTemplate> 27 </DataGridTemplateColumn.CellTemplate> 28 </DataGridTemplateColumn> 29 <!-- ↓コンボボックス側↓--> 30 <DataGridTemplateColumn Header="コンボボックス列" IsReadOnly="True"> 31 <DataGridTemplateColumn.CellTemplate> 32 <DataTemplate> 33 <ComboBox Name="test_combobox" 34 ItemsSource="{Binding RelativeSource={ 35 RelativeSource Mode=FindAncestor, 36 AncestorType={x:Type DataGrid}}, Path=DataContext.GenderList, Mode=OneWay}" 37 DisplayMemberPath="Name" 38 SelectedValuePath="Cd" 39 SelectedValue="{Binding Sex}" 40 SelectedIndex="{Binding Path= Index}"/> 41 </DataTemplate> 42 </DataGridTemplateColumn.CellTemplate> 43 </DataGridTemplateColumn> 44 </DataGrid.Columns> 45</DataGrid> 46</Grid> 47</Window> 48
[C#]
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Windows; 7using System.Windows.Controls; 8using System.Windows.Data; 9using System.Windows.Documents; 10using System.Windows.Input; 11using System.Windows.Media; 12using System.Windows.Media.Imaging; 13using System.Windows.Navigation; 14using System.Windows.Shapes; 15using System.Data; 16using System.Collections.ObjectModel; 17using static system_test_project.MainViewMode; 18 19namespace system_test_project 20{ 21 /// <summary> 22 /// MainWindow.xaml の相互作用ロジック 23 /// </summary> 24 /// 25 26 public partial class MainWindow : Window 27 { 28 29 public List<Gender> GenderList { set; get; } 30 31 public MainWindow() 32 { 33 34 InitializeComponent(); 35 36 GenderList = new List<Gender>(); 37 GenderList.Add(new Gender(1, "♂")); 38 GenderList.Add(new Gender(2, "♀")); 39 40 41 // 私はこの↓の箇所でコンボボックスのSelectedIndexを行毎に指定する事を理想としていました。 42 dataGrid.ItemsSource = new ObservableCollection<Gender> { 43 new Gender { Syouhinmei="化粧品", Price=1900, Tax=10 , Index = 0}, 44 new Gender { Syouhinmei="洗剤", Price=500, Tax=10 ,Index = 1 }, 45 new Gender { Syouhinmei="パン", Price=800, Tax=8 ,Index = 1}, 46 new Gender { Syouhinmei="牛乳", Price=800, Tax=8 ,Index = 1} 47 }; 48 49 this.DataContext = this; 50 } 51 } 52 53 54 55 public class Gender 56 { 57 /// <summary> 58 /// コンストラクタ 59 /// </summary> 60 /// <param name="cd"></param> 61 /// <param name="name"></param> 62 public Gender(int cd, String name) 63 { 64 Cd = cd; 65 Name = name; 66 } 67 68 /// <summary> 69 /// 性別コード 70 /// </summary> 71 public int Cd { get; set; } 72 73 /// <summary> 74 /// 性別名 75 /// </summary> 76 public String Name { get; set; } 77 78 79 80 81 public Gender(){ } 82 83 84 public Gender(int index) 85 { 86 Index = index; 87 } 88 89 public int Index { get; set; } 90 public string Syouhinmei { get; set; } 91 public int Price { get; set; } 92 public double Tax { get; set; } 93 94 } 95} 96
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/05 02:52