基本上,您需要一个可枚举控件,该控件为 ObservableCollection 中的每个元素都有一个项目。控件的项目将需要模板化以使用您的自定义控件显示数据
为此,请创建一个 ObservableCollection 来保存您的数据对象并将其用作 ListBox 的 ItemsSource。然后需要更改 ListBox 以在 WrapPanel 而不是默认布局中显示其项目。修改 ListBox 的 ItemTemplate 以对每个列表项使用您的自定义用户控件。
视图模型:
public class WindowViewModel
{
public ObservableCollection<MyDatabaseObject> DatabaseObjects { get; set; }
}
public class MyDatabaseObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string DbName
{
get { return _dbName; }
set {
_dbName = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("dbName");
}
}
private _dbName;
}
xml:
<Grid>
<ListBox ItemsSource="{Binding DatabaseObjects}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<MyUserControl Title="{Binding DbName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>