0

カスタム コントロールがありListItemます。ウィンドウにそのような項目を 5 つ表示する必要がありますが、これらの項目は実行時に変更される可能性があります。アイテムが追加または削除されたり、コンテンツが変更されたりする可能性がありListItemます。

ListBox は、アイテムを表示するための優れたソリューションのようです。しかし、私が見たのは、アイテムを追加してスタイルを設定し、データ トリガーで更新を処理できることです。

myListBox.Items.Add(new { FileName = "SomeFile", State="Uploaded" });

しかし、次のようなことはできません

ListItem curItem = new ListItem();
myListBox.Items.Add(new { curItem });

私がしても、リストに空のアイテムが表示されます。

したがって、カスタム コントロールをリストボックスに追加したい場合、どうすればそれが可能になるでしょうか。これは ListBox を単なるコンテナーとして使用しているため、リストの変更後の配置やすべての問題から逃れることができます。または、それを行うより良い方法はありますか?

4

2 に答える 2

2

あなたは幸運です - これが WPF のパンとバターです! ListBox の ItemsSource を設定します (XAML または cs で可能):

myListBox.ItemsSource = myEnumerableCollection;

また

<ListBox ItemsSource="{Binding MyItemsProperty}">

DataTemplate を使用して (UserControl は必要ありません)、XAML で各項目のスタイルを設定します。

<ListBox ItemsSource="{Binding MyItemsProperty}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel>
        <TextBlock Text="{Binding FileName}"/>
        <TextBlock Text="{Binding State}"/>
        <!--Whatever you want-->
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

コレクションがObservableCollection<T>の場合、そのコレクションへの変更 (追加または削除された項目など) は自動的に ListBox に反映されます。T がINotifyPropertyChangedを実装する場合、各項目のプロパティへの変更も自動的に UI に表示されます。

詳細については、WPF バインディングの概要を参照してください。

于 2013-09-25T01:24:23.817 に答える
0

WPF の手続き型コードで UI 要素を作成または操作しないでください。

<ListBox ItemsSource="{Binding SomeCollection}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <my:MyControl/>
     </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

wheremy:MyControlは、UserControl必要な UI を備えた です。

于 2013-09-25T01:13:20.343 に答える