ItemsControl.ItemsSource プロパティ

2013/12/12

ItemsControl のコンテンツの生成に使用するコレクションを取得または設定します。

Namespace:  System.Windows.Controls
アセンブリ:  System.Windows (System.Windows.dll 内)
XAML の XMLNS: xmlns にマップされていません。

public IEnumerable ItemsSource { get; set; }
<itemsControl ItemsSource="bindingDeclaration"/>
-or-
<itemsControl ItemsSource="resourceReferenceToIEnumerable"/>

XAML 値

bindingDeclaration

{Binding ....} マークアップ拡張機能を使用する Binding 宣言。詳細については、Binding を参照してください。

resourceReferenceToIEnumerable

リソース コレクションから IEnumerable 型の既存のオブジェクトへのリソース参照。リソース参照では、目的の IEnumerable をキーで指定する必要があります。

プロパティ値

型: System.Collections.IEnumerable
ItemsControl のコンテンツを生成するのに使用されるオブジェクト。既定値は null です。

依存関係プロパティの識別子フィールド:  ItemsSourceProperty

ItemsControl には、Items プロパティに項目を追加するか、ItemsSource プロパティをデータ コレクションに設定することによって、項目を追加できます。Items には、さまざまな種類のオブジェクトを追加できます。ItemsSourcenull 以外の場合、Items プロパティの項目は読み取り専用になります。Items プロパティのオブジェクトを追加したり、オブジェクトに変更を加えたりすることはできません。

ItemsSource には、INotifyCollectionChanged インターフェイスを実装するオブジェクトを設定できます。これにより、コレクション内の変更が、ItemsControl に反映されます。このようなオブジェクトは、ObservableCollection<T> クラスで定義されます。

次の例では、ItemsControl を継承する ListBox を作成し、それを Customer オブジェクトのコレクションにバインドしています。この例では、DisplayMemberPathProperty を顧客の LastName プロパティに設定します。したがって、ListBox には次の値が表示されます。

  • Anderberg

  • Ashton

  • Hicks

  • Pica


<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>
    <ListBox ItemsSource="{StaticResource customers}" Width="250" Margin="0,5,0,10" 
       DisplayMemberPath="LastName"  />
</Grid>


Customer クラスと ListBox がバインドされるコレクションを次の例に示します。


public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }

    public Customer(String firstName, String lastName, String address)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
    }

}

public class Customers : ObservableCollection<Customer>
{
    public Customers()
    {
        Add(new Customer("Michael", "Anderberg",
                "12 North Third Street, Apartment 45"));
        Add(new Customer("Chris", "Ashton",
                "34 West Fifth Street, Apartment 67"));
        Add(new Customer("Cassie", "Hicks",
                "56 East Seventh Street, Apartment 89"));
        Add(new Customer("Guido", "Pica",
                "78 South Ninth Street, Apartment 10"));
    }

}


ListBox を作成し、ItemsSource プロパティを文字列のコレクションに設定するコード例を次に示します。この例では、srcxmlns:src="clr-namespace:ItemsControlSnippets" として定義されています。


<StackPanel Grid.Column="1">
  <StackPanel.Resources>
    <src:Items x:Key="items"/>
  </StackPanel.Resources>

  <ListBox Name="lb2" ItemsSource="{Binding Source={StaticResource items}}"/>
  <TextBlock Name="tb2"/>
</StackPanel>


次の例では、前の例の ListBoxItems プロパティに格納されている各文字列を反復処理し、各項目を TextBlock (tb2) に追加しています。Items プロパティには、ListBox のバインド先の文字列のコレクションが含まれます。この文字列は Items プロパティを使用して取得できますが、文字列を追加したり文字列に変更を加えたりすることはできません。


//lb2.Items[0] = "Change this item"; //Raises an exception.
System.Text.StringBuilder sb2 = new System.Text.StringBuilder();

foreach (object item in lb2.Items)
{
    sb2.AppendLine(item.ToString());

}

tb2.Text = sb2.ToString();


次の例は、ListBox のバインド先となる文字列のコレクションを示しています。


public class Items : 
    System.Collections.ObjectModel.ObservableCollection<string>
{
    public Items()
    {
        Add("Item 1");
        Add("Item 2");
        Add("Item 3");
        Add("Item 4");
        Add("Item 5");
    }
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2014 Microsoft