トップ回答者
WPFアプリケーションでのListViewへのアイテム追加

質問
-
WPF&C#初心者です。
ListViewを使ったアプリケーションを作成中ですが、ListViewへのアイテムの追加方法がわかりません。
GridViewを使ってコラムヘッダを表示するところまでできました。ここまではXAMLで記述しています。
コードの方でデータを生成し、ListViewに表示させたいのですが、うまくいきません。
Formを使う場合は、
string[] str = { "ITEM1", "ITEM2", "ITEM3" };
listView.Items.Add(new ListViewItem(str));
のようにすればよいと思いますが、ListViewItemは1つの引数をとるコンストラクタが無いため、エラーに
なってしまいます。
いろいろ検索しても、いい答えが見つかりません。
先達の方、どうか教えてください。
回答
-
お手軽に配列を突っ込みたいのでしたら下のようにすればいけますよ。
XAML部分
Code Snippet<ListView.View>
<GridView>
<GridViewColumn Header="Col1" DisplayMemberBinding="{Binding [0]}" />
<GridViewColumn Header="Col2" DisplayMemberBinding="{Binding [1]}" />
<GridViewColumn Header="Col3" DisplayMemberBinding="{Binding [2]}" />
</GridView>
</ListView.View>コード側からアイテムを追記するコードは↓のような感じでいけます。
Code SnippetlistView.Items.Add(new string[] { "1", "2", "3" });
listView.Items.Add(new string[] { "4", "5", "6" }); -
たとえば、
<GridViewColumn DisplayMemberBinding="{Binding Path=Id}" Width="100" Header="ID"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="100" Header="Name"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Value}" Width="100" Header="Value"/>としておいて、
Code Snippetpublic class ManagedItem {
public int Id { get { ... } }
public string Name { get { ... } }
public object Value { get { ... } }
....
public ManagedItem(int id, string name, object value) {
...
}
}
Code SnippetlistView.Items.Add(new ManagedItem(0, "sample1", "data"));
すべての返信
-
ListViewのItemSourceプロパティにコレクションを設定すると表示されます。
ヘッダをどのように定義されたのかわからないので、これ以上具体的には説明しにくいです。
一応自分では↓のような感じでListViewを使ってます。
http://blogs.wankuma.com/kazuki/archive/2007/10/20/103134.aspx
-
+かずき+ さん、ありがとうございます。
XAMLでは以下のように定義しています。
<ListView Margin="0,-2,0,3" Name="listView1" Grid.Column="5">
<ListView.View>
<GridView>
<GridViewColumn Header="Item1" Width="100"></GridViewColumn>
<GridViewColumn Header="Item2" Width="100"></GridViewColumn>
<GridViewColumn Header="Item3" Width="100"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>この状態で、C#の方でlistView.Items.Addのような感じでデータを追加していきたいのです。
ちょうどMFCでListViewを扱う感じです。
ItemsSourceを使ってBindする方式で考えた方がよいのでしょうか。
-
たとえば、
<GridViewColumn DisplayMemberBinding="{Binding Path=Id}" Width="100" Header="ID"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Width="100" Header="Name"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=Value}" Width="100" Header="Value"/>としておいて、
Code Snippetpublic class ManagedItem {
public int Id { get { ... } }
public string Name { get { ... } }
public object Value { get { ... } }
....
public ManagedItem(int id, string name, object value) {
...
}
}
Code SnippetlistView.Items.Add(new ManagedItem(0, "sample1", "data"));
-
お手軽に配列を突っ込みたいのでしたら下のようにすればいけますよ。
XAML部分
Code Snippet<ListView.View>
<GridView>
<GridViewColumn Header="Col1" DisplayMemberBinding="{Binding [0]}" />
<GridViewColumn Header="Col2" DisplayMemberBinding="{Binding [1]}" />
<GridViewColumn Header="Col3" DisplayMemberBinding="{Binding [2]}" />
</GridView>
</ListView.View>コード側からアイテムを追記するコードは↓のような感じでいけます。
Code SnippetlistView.Items.Add(new string[] { "1", "2", "3" });
listView.Items.Add(new string[] { "4", "5", "6" }); -
こんにちは。中川俊輔 です。
Hongliangさん、+かずき+さん、回答ありがとうございます。
Sao1025さん、フォーラムのご利用ありがとうございます。
有用な情報と思われたため、
勝手ながらHongliangさん、+かずき+さんの回答へ回答済みチェックをつけさせていただきました。
回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。Sao1025さんはチェックを解除することもできますので、ご確認ください。
それでは!