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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

XAML

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

WPF

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

Q&A

解決済

1回答

2651閲覧

[WPF]DataGridに手入力でデータを埋め登録する仕組みを作りたい

K.KATSU2

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

XAML

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

WPF

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

0グッド

0クリップ

投稿2021/04/30 15:19

編集2021/05/01 01:16

前提・実現したいこと

WindowにDataGridコントロールを表示させ、以下の手法で入力を許可します。
1.CSVから値を取り込む(取り込み後編集可)
2.手入力で各項目を埋む

最後にボタン押下でDataGridのデータを取り込みリストオブジェクトを作成するということを行いたいです。
ですが、DataGridの最下行に空白行を表示する方法がわからないでいる状態です。
どうすれば実現できるかご教示いただけないでしょうか。
また、上述の手法で入力を許可する場合、コードビハインド側とのバインドの注意点などありましたらご教授のほどよろしくお願いいたします。
(上述を満たす参考URLがすでに存在しておりましたらご共有いただけますと幸いです)

該当のソースコード

[WindowのXaml]

Xaml

1<Window x:Class="TEST.Views.DataRegistration" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 Height="350" Width="500" 6 prism:ViewModelLocator.AutoWireViewModel="False"> 7 <StackPanel> 8 <DataGrid Name="dataGrid" CanUserAddRows="True" ItemsSource="{Binding Members}" 9 ScrollViewer.HorizontalScrollBarVisibility="Disabled" Height="291"> 10 <DataGrid.Columns> 11 <DataGridTextColumn Header="名前" Binding="{Binding Name}" Width="*" /> 12 <DataGridTextColumn Header="部門" Binding="{Binding Department}" Width="80" /> 13 <DataGridTextColumn Header="権限" Binding="{Binding Authority}" Width="80" /> 14 <DataGridTextColumn Header="メールアドレス" Binding="{Binding Mail}" Width="150" /> 15 </DataGrid.Columns> 16 </DataGrid> 17 <Grid Height="20"> 18 <Grid.ColumnDefinitions> 19 <ColumnDefinition Width="1*"/> 20 <ColumnDefinition Width="1*"/> 21 </Grid.ColumnDefinitions> 22 <Button Grid.Column="0" Content="CSV読込み" /> 23 <Button Grid.Column="1" Content="登録" /> 24 </Grid> 25 </StackPanel> 26</Window>

[コードビハインド]

C#

1 public class MemberRegistrationViewModel : BindableBase 2 { 3 public MemberRegistrationViewModel() 4 { 5 6 } 7 8 private ObservableCollection<Member> _members = new ObservableCollection<Member>(); 9 public ObservableCollection<Member> Members 10 { 11 get { return _members; } 12 set { SetProperty(ref _members, value); } 13 } 14 } 15 16 public class Member 17 { 18 public string Name { get; set; } 19 public string Department { get; set; } 20 public string Authority { get; set; } 21 public string Mail { get; set; } 22 23 }

試したこと

上述に記載した通り、「CanUserAddRows="True"」にしているのですが空白行が表示されません。
また、数々のネット情報を見た中で空白行が表示されているものもありましたが、それを参考に記述してもうまくいきませんでした。

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

・VisualStudio2019
・WPF(Prismフレームワーク使用)

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

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

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

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

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

TN8001

2021/04/30 23:43

DataGridのItemsSourceはどうなっているんでしょうか??
K.KATSU2

2021/05/01 01:17

お世話になっております。 コードビハインド側を記述し、Xaml側をバインドした状態に修正しました。 イベント処理はまだ実装しておりません。
TN8001

2021/05/01 01:50

WindowのDataContextにViewModelが入っているのであれば普通に空白行が出るはずですが、そのあたりはどうでしょうか? CSVに関してはいくらでも情報が出ると思うのですが、どこを見て何がわからなかったのでしょうか?
K.KATSU2

2021/05/01 02:52

ご回答ありがとうございます。 Xamlのヘッダー部に以下のコードを追記してDataContextにViewModelを登録してみましたが結果は同じで空白行が表示されませんでした。 コレクションに1つ以上登録されていないといけないなど、空白を表示するための登録処理が必要だったりしますでしょうか。 ------------------ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:viewmodels="clr-namespace:TEST.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:MemberRegistrationViewModel}" ----------------------
TN8001

2021/05/01 03:01

d:DataContextはデザイン時のみの設定です。 view(TEST.Views.DataRegistration)とvm(MemberRegistrationViewModel)の名前が違うのは仮名に変えたせいかなんかですか? もし同じ(DataRegistrationとDataRegistrationViewModel等)であればAutoWireViewModel="True"でいいです。 違うのであれば <Window.DataContext> <viewmodels:MemberRegistrationViewModel /> </Window.DataContext> とでもしてください。
K.KATSU2

2021/05/01 03:47

ご回答いただきありがとうございます。 テスト的に用意したソリューションとコードをごちゃませにしてしまっておりました。 同じものです。 そして、「AutoWireViewModel="True"」にすることで空白行は現れました。 どうもありがとうございます。
K.KATSU2

2021/05/01 04:25

ただ、true にしてしまうと今度は カードビハインド側のプロパティ名もdatagridの列に出現するのですが、これを避けるためにはどうすれば良いでしょうか?
TN8001

2021/05/01 04:50

[C# - [WPF]DataGridにViewModelのプロパティをバインドしたい|teratail](https://teratail.com/questions/335172 で、やっているんですが AutoGenerateColumns="False" が、その設定です。
K.KATSU2

2021/05/01 21:27

習熟度が不足しており申し訳ありません。 できました、ありがとうございます。
guest

回答1

0

自己解決

本質問は以下の対応で解決しました。

prism:ViewModelLocator.AutoWireViewModel="False">
→prism:ViewModelLocator.AutoWireViewModel="True">


DataGridの属性に以下を追加
AutoGenerateColumns="False"

投稿2021/05/04 22:56

K.KATSU2

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問