前提・実現したいこと
WPFのDataGridComboBoxColumnでのBingingが色々と調べましたが理解できません。
実現したい機能は以下のとおりです。
enum Category
より値を選択できる- 表示テキストは
Dictionary<Category, string> CategoryName
から表示 - 項目ごとに異なった初期値が設定されている
発生している問題・エラーメッセージ
enum Category
が表示されるが値が決定できない- 初期値が設定されていない
該当のソースコード
XAML
1 <DataGrid x:Name="DataGrid" AutoGenerateColumns="False"> 2 <DataGrid.Columns> 3 <DataGridTextColumn IsReadOnly="True" Binding="{Binding ItemName}" /> 4 <DataGridComboBoxColumn x:Name="CategoryColumn" 5 DisplayMemberPath="Name" 6 SelectedValuePath="Category" /> 7 </DataGrid.Columns> 8 </DataGrid>
C#
1 public partial class MainWindow : Window 2 { 3 public MainWindow() 4 { 5 this.InitializeComponent(); 6 } 7 8 public enum Category 9 { 10 Category1, 11 Category2, 12 Category3, 13 } 14 15 public static readonly Dictionary<Category, string> CategoryName = new Dictionary<Category, string> 16 { 17 { Category.Category1, "カテゴリ1" }, 18 { Category.Category2, "カテゴリ2" }, 19 { Category.Category3, "カテゴリ3" }, 20 }; 21 22 public struct Data 23 { 24 public string ItemName { get; set; } 25 } 26 27 public struct CategoryData 28 { 29 public string Name => MainWindow.CategoryName[this.Category]; 30 public Category Category { get; set; } 31 } 32 33 private List<Data> Source = new List<Data>(); 34 private List<CategoryData> ColumnsSource = new List<CategoryData>(); 35 36 private void Window_Loaded(object sender, RoutedEventArgs e) 37 { 38 this.Source.Clear(); 39 this.Source.AddRange(new List<Data> 40 { 41 new Data { ItemName = "項目1" }, 42 new Data { ItemName = "項目2" }, 43 new Data { ItemName = "項目3" }, 44 }); 45 this.DataGrid.ItemsSource = this.Source; 46 47 this.ColumnsSource.Clear(); 48 this.ColumnsSource.AddRange(new List<CategoryData> 49 { 50 new CategoryData { Category = Category.Category1 }, 51 new CategoryData { Category = Category.Category2 }, 52 new CategoryData { Category = Category.Category3 } 53 }); 54 this.CategoryColumn.ItemsSource = this.ColumnsSource; 55 } 56 }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。