🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

9842閲覧

DataGridのComboBoxへのバインドができない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/11/02 07:48

前提・実現したいこと

データバインドでDataGridのComboBoxに値をバインドしたいのですが
コンボボックスの中身が空で、なにも表示されません。(エラーは発生していません)
どこかに間違いがあるでしょうか?

よろしくお願いいたします。

該当のソースコード

ViewModel

1 2namespace BlankApp1.ViewModels 3{ 4 public class MainWindowViewModel : BindableBase 5 { 6 public ObservableCollection<GridRow> GridRows { get; set; } = new ObservableCollection<GridRow>(); 7 8 public MainWindowViewModel() 9 { 10 var a = new Parson() { Name = "aaa", Code = 100 }; 11 var b = new Parson() { Name = "bbb", Code = 200 }; 12 13 var col = new ObservableCollection<Parson> 14 { 15 a,b 16 }; 17 18 GridRows.Add(new GridRow() { ComboValue = col }); 19 GridRows.Add(new GridRow() { ComboValue = col }); 20 } 21 } 22 23 public class GridRow 24 { 25 public ObservableCollection<Parson> ComboValue { get; set; } 26 } 27 28 public class Parson 29 { 30 public int Code { get; set; } 31 public string Name { get; set; } 32 } 33}

XAML

1 2<Window 3 x:Class="BlankApp1.Views.MainWindow" 4 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 5 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 6 xmlns:prism="http://prismlibrary.com/" 7 Title="{Binding Title}" 8 Width="525" 9 Height="350" 10 prism:ViewModelLocator.AutoWireViewModel="True"> 11 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding GridRows}"> 12 <DataGrid.Columns> 13 <DataGridComboBoxColumn 14 DisplayMemberPath="Name" 15 Header="名前" 16 ItemsSource="{Binding ComboValue}" /> 17 </DataGrid.Columns> 18 </DataGrid> 19</Window>

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

.Net Faramework 4.7.2
Prism 7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DataGridComboBoxColumn は使い方にも操作性にも癖があるので使ってません。
DataGridTemplateColumn を使うと良い感じになりますよ。

C#

1<DataGridTemplateColumn Header="名前"> 2 <DataGridTemplateColumn.CellTemplate> 3 <DataTemplate> 4 <ComboBox ItemsSource="{Binding ComboValue}" 5 SelectedItem="{Binding SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 6 DisplayMemberPath="Name"/> 7 </DataTemplate> 8 </DataGridTemplateColumn.CellTemplate> 9</DataGridTemplateColumn>

投稿2019/11/02 08:18

hihijiji

総合スコア4152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/02 13:21

できました、ありがとうございます。
guest

0

DataContext に入れているところが見当たりません。

投稿2019/11/02 08:03

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/02 08:14

ご回答ありがとうございます。 「prism:ViewModelLocator.AutoWireViewModel="True"」 なので、ViewModelがバインドはされていると思うのですが・・・ 他にどこか記述が必要な箇所があるということでしょうか?
Zuishin

2019/11/02 08:33

すみません、見落としていました。 DataGridViewComboBoxCloumn の DataSource に入っているのは ViewModel なので、DataGridViewComboBoxCloumn.ItemsSource へのバインディングがうまくいっていません。 hihijiji さんの方法を試してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問