none
WPFアプリケーションでのListViewへのアイテム追加 RRS feed

  • 質問

  • WPF&C#初心者です。

    ListViewを使ったアプリケーションを作成中ですが、ListViewへのアイテムの追加方法がわかりません。

    GridViewを使ってコラムヘッダを表示するところまでできました。ここまではXAMLで記述しています。

    コードの方でデータを生成し、ListViewに表示させたいのですが、うまくいきません。

    Formを使う場合は、

      string[] str = { "ITEM1", "ITEM2", "ITEM3" };

      listView.Items.Add(new ListViewItem(str));

    のようにすればよいと思いますが、ListViewItemは1つの引数をとるコンストラクタが無いため、エラーに

    なってしまいます。

     

    いろいろ検索しても、いい答えが見つかりません。

    先達の方、どうか教えてください。

     

    2008年3月1日 15:26

回答

  • お手軽に配列を突っ込みたいのでしたら下のようにすればいけますよ。

    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 Snippet
    listView.Items.Add(new string[] { "1", "2", "3" });
    listView.Items.Add(new string[] { "4", "5", "6" });

     

    2008年3月2日 6:06
  • たとえば、

    <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 Snippet

     

    public class ManagedItem {

        public int Id { get { ... } }

        public string Name { get { ... } }

        public object Value { get { ... } }

        ....

        public ManagedItem(int id, string name, object value) {

            ...

        }

    }

     

     

    Code Snippet

     

    listView.Items.Add(new ManagedItem(0, "sample1", "data"));

     

     

    とか。
    2008年3月2日 4:08
  • 中川さん、アドバイスありがとうございます。

    今後気をつけるようにします

    2008年3月8日 0:56

すべての返信

  • ListViewのItemSourceプロパティにコレクションを設定すると表示されます。

    ヘッダをどのように定義されたのかわからないので、これ以上具体的には説明しにくいです。

     

    一応自分では↓のような感じでListViewを使ってます。

    http://blogs.wankuma.com/kazuki/archive/2007/10/20/103134.aspx

    2008年3月1日 18:00
  • +かずき+ さん、ありがとうございます。

    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する方式で考えた方がよいのでしょうか。

     

     

    2008年3月2日 3:01
  • たとえば、

    <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 Snippet

     

    public class ManagedItem {

        public int Id { get { ... } }

        public string Name { get { ... } }

        public object Value { get { ... } }

        ....

        public ManagedItem(int id, string name, object value) {

            ...

        }

    }

     

     

    Code Snippet

     

    listView.Items.Add(new ManagedItem(0, "sample1", "data"));

     

     

    とか。
    2008年3月2日 4:08
  • Hongliangさん、ありがとうございました。

     

    教えていただいた方法でできました。自分がやりたかったこととはちょっと違いますが、

    結果は同じです。

     

    MFCとは考え方がだいぶ違いますね。

    もっと勉強しなければ

    2008年3月2日 5:25
  • お手軽に配列を突っ込みたいのでしたら下のようにすればいけますよ。

    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 Snippet
    listView.Items.Add(new string[] { "1", "2", "3" });
    listView.Items.Add(new string[] { "4", "5", "6" });

     

    2008年3月2日 6:06
  • +かずき+ さん、ありがとうございます。

     

    これこれ。私のイメージはこれです

    コードの方はほぼ同じ記述としていましたが、実行すると表示がおかしくなってました。

    多分XAMLの方にDisplayMemberBinding="{Binding [0]}"がなかったのでおかしくなっていたのでしょう。

    きっと、これがミソだったんですね 

    2008年3月2日 6:55
  • こんにちは。中川俊輔 です。

     

    Hongliangさん、+かずき+さん、回答ありがとうございます。

     

    Sao1025さん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、

    勝手ながらHongliangさん、+かずき+さんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    Sao1025さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2008年3月5日 7:58
  • 中川さん、アドバイスありがとうございます。

    今後気をつけるようにします

    2008年3月8日 0:56