質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

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

Q&A

解決済

2回答

13499閲覧

WPFでDataGridに値が表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

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

0グッド

0クリップ

投稿2017/09/08 15:05

編集2017/09/08 16:39

Visual Studio 2017 Communityを用いて行っています。C#,WPF共にまだまだ勉強中ですので基礎的な点で間違えているかもしれません。そのような点についてもぜひご指摘頂けるとありがたいです。

WPFのDataGridのItemSourceにObservableCollectionを与えても、下の画像のように項目数の分だけ空白行が現れ、正しく表示されません(画像は5項目を与えた状態)。

5項目を与えた状態

XAML

1// DataGrid部分のXAML抜粋 2<DataGrid x:Name="DataGrid1" IsReadOnly="True" />

csharp

1public partial class MainWindow : Window 2{ 3 public ObservableCollection<Data> data = new ObservableCollection<Data>(); 4 5 public MainWindow() 6 { 7 InitializeComponent(); 8 DataGrid1.ItemsSource = data; 9 } 10} 11 12public class DataOperate 13{ 14 private MainWindow mw = (MainWindow)App.Current.MainWindow; 15 16 private async void DataAdd(string d1,string d2) 17 { 18 await mw.Dispatcher.InvokeAsync(() => mw.data.Add(new Data(d1, d2))); 19 } 20} 21 22public class Data 23{ 24 public string Data1; 25 public string Data2; 26 public Data(string d1,string d2) 27 { 28 Data1 = d1; 29 Data2 = d2; 30 } 31}

ここで、DataOperateクラス内のDataAddを呼び出してデータを追加して行こうとしています。

ですが、追加するたびに空白行が増えるだけで、データをちゃんと表示してくれません。

ObservableCollectionを使うのは初めてですので、いまいち正しく使えていないかもしれません。
正しく表示させるにはどのようにすればよいのでしょうか?

よろしくお願いします。

追記

  • DataAdd実行後、MainWindowのdataに正しくデータを入っているか確認したところ、正しくデータが入っておりました。そのため、表示段階やObservableCollectionの問題でしょうか…?(9/9 1:38)

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

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

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

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

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

IYEMON018

2017/09/08 15:32

XAMLのDataGridのx:NameとMainWindowのコンストラクタのPlayersDataが一致していないのですが、ItemsSourceのバインディングターゲットが間違っていたりしませんか?
退会済みユーザー

退会済みユーザー

2017/09/08 15:54

申し訳ないです、手違いでこっちに入力する際に間違えてしまっていただけでした。修正を行いましたので再度見て頂けると幸いです。
guest

回答2

0

ベストアンサー

フィールドだから無理
プロパティにしないと

C#

1public class Data 2{ 3 //public string Data1; 4 public string Data1{ get; set; } 5 //public string Data2; 6 public string Data2{ get; set; } 7 public Data(string d1,string d2) 8 { 9 Data1 = d1; 10 Data2 = d2; 11 } 12}

投稿2017/09/09 11:14

len_souko

総合スコア1348

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

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

退会済みユーザー

退会済みユーザー

2017/09/09 15:03

クラスのフィールドとプロパティをちゃんと理解できていなかったのが問題でした… ありがとうございました!!
guest

0

XAMLを以下のように変更しても表示されないでしょうか。

xml

1<DataGrid x:Name="DataGrid1" IsReadOnly="True" > 2 <DataGrid.Columns> 3 <DataGridTextColumn Binding="{Binding Data1, Mode=OneWay}" 4 Header="Data1" /> 5 <DataGridTextColumn Binding="{Binding Data2, Mode=OneWay}" 6 Header="Data2" /> 7 </DataGrid.Columns> 8</DataGrid>

もし、これでもだめなら以下の部分が怪しそうですが、呼び出し元が無いので何とも言えません…

csharp

1 private async void DataAdd(string d1,string d2) 2 { 3 await mw.Dispatcher.InvokeAsync(() => mw.data.Add(new Data(d1, d2))); 4 }

投稿2017/09/08 16:01

IYEMON018

総合スコア202

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

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

退会済みユーザー

退会済みユーザー

2017/09/08 16:30 編集

変更してみましたが、特段変わりはありませんでした…… 項目行が最初から表示され、その行の高さと同じ高さの空白行が出るようになりました。 呼び出し元で正しくstring値を2つ与えられていることは確認しているので、そちらに問題はないと思います…
IYEMON018

2017/09/09 05:00

なら、DataOperateクラスのDataAddメソッドが怪しい気がします。 呼び出し元のコードがないのではっきりとしたことは言えませんが。 そもそもこのメソッドはなぜ非同期になっているのでしょうか? 同期処理に変更しても割らないものなのでしょうか?
退会済みユーザー

退会済みユーザー

2017/09/09 15:05

Dataクラスが原因でした… 色々とアドバイス頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問