CompositeCollection の使い方が分からない・・・
XAML 上で CompositeCollection を挟むと表示されないんです。使い方は合っているような気がするのですが、なんでや~。 XAML 上だと CompositeCollection がプロパティメンバーではなくなるとか?分からない...
表示されない
<Window x:Class="WpfApp14.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp14" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <ListBox> <ListBox.ItemsSource> <CompositeCollection> <CollectionContainer Collection="{Binding Items1}" /> <CollectionContainer Collection="{Binding Items2}" /> <CollectionContainer Collection="{Binding Items3}" /> </CompositeCollection> </ListBox.ItemsSource> </ListBox> </Window>
using System.Collections.Generic; using System.Windows; namespace WpfApp14 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public List<string> Items1 { get; set; } public List<string> Items2 { get; set; } public List<int> Items3 { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; Items1 = new List<string> { "aaa", "bbb", "ccc" }; Items2 = new List<string> { "ddd", "eee", "fff" }; Items3 = new List<int> { 1, 2, 3 }; } } }
表示される
<Window x:Class="WpfApp14.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp14" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <ListBox ItemsSource="{Binding Items}" /> </Window>
using System.Collections.Generic; using System.Windows; using System.Windows.Data; namespace WpfApp14 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public CompositeCollection Items { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; var Items1 = new List<string> { "aaa", "bbb", "ccc" }; var Items2 = new List<string> { "ddd", "eee", "fff" }; var Items3 = new List<int> { 1, 2, 3 }; Items = new CompositeCollection(); Items.Add(new CollectionContainer() { Collection = Items1 }); Items.Add(new CollectionContainer() { Collection = Items2 }); Items.Add(new CollectionContainer() { Collection = Items3 }); } } }
追記
リソース経由で CollectionViewSource 経由で参照することで表示できるようになったよ!わーい!ってなるかーぼけー!という感想を持ちました。遠回り過ぎるですよ。
<Window x:Class="WpfApp14.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp14" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Window.Resources> <CollectionViewSource x:Key="Items1Source" Source="{Binding Items1}" /> <CollectionViewSource x:Key="Items2Source" Source="{Binding Items2}" /> <CollectionViewSource x:Key="Items3Source" Source="{Binding Items3}" /> </Window.Resources> <ListBox> <ListBox.ItemsSource> <CompositeCollection> <CollectionContainer Collection="{Binding Source={StaticResource Items1Source}}" /> <CollectionContainer Collection="{Binding Source={StaticResource Items2Source}}" /> <CollectionContainer Collection="{Binding Source={StaticResource Items3Source}}" /> </CompositeCollection> </ListBox.ItemsSource> </ListBox> </Window>
using System.Collections.Generic; using System.Windows; namespace WpfApp14 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public List<string> Items1 { get; set; } public List<string> Items2 { get; set; } public List<int> Items3 { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; Items1 = new List<string> { "aaa", "bbb", "ccc" }; Items2 = new List<string> { "ddd", "eee", "fff" }; Items3 = new List<int> { 1, 2, 3 }; } } }