如何在WPF中使用数据绑定为列表中的每个元素创建新的用户控件?

Joe*_*oel 4 c# wpf binding user-controls

我有一个对象列表.对于列表中的每个项目,我想创建一个绑定到该项目的新用户控件.根据我的阅读,以编程方式执行此操作是WPF的不良做法(并且不太直接),因此我应该使用数据绑定作为解决方案.问题是,我无法弄清楚如何做到这一点.我在编译时不知道列表的内容(只是类型),所以我无法为每个元素创建和绑定XAML.谷歌和MSDN似乎没有任何答案,所以也许我正在考虑这个错误的方式?我需要做什么?

谢谢

编辑:澄清一下,我正在尝试制作自己的音乐评分软件,比如Rosegarden.该列表将包含所有度量,用户控件将是它们的可视化表示.

Rob*_*ney 5

比Julien Lebosquain的建议更通用的方法(以及当项目列表包含多种数据类型的对象时将起作用的方法):

创建一个DataTemplate用于在列表中显示类型的项目,例如:

<DataTemplate DataType="local:Measure">
   <local:MeasureUserControl DataContext="{Binding}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

使用an ItemsControl来呈现项目:

<ItemsControl ItemsSource="{Binding MeasureList}"/>
Run Code Online (Sandbox Code Playgroud)

您可以设置to 的ItemsPanel属性来控制它如何布置用户控件,例如:ItemsControlItemsPanelTemplate

<ItemsControl.ItemsPanel>
   <ItemsPanelTemplate>
      <StackPanel Orientation="Horizontal"/>
   </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)

这种方法通常优于使用a ListBox时不需要的功能ListBox,例如其默认边框和选择行为.