我有一个ObservableCollection,它有一个对象列表。
我想将这个可观察的集合绑定到ListBox,但不是以每个对象在ListView中显示的方式,而是将每个对象创建一个UserControl,将对象本身作为输入参数。
举一个类似的例子;想象一下服务器浏览器,其中每一行都是UserControl,数据存储在List / ObservableCollection中,然后显示在前端ListBox中。
我在MainWindow.xaml中有这个XAML代码
<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding Bills}" ItemContainerStyle="{StaticResource BillStyle}">
</ListBox>
这是调用UserControl的样式
<Style TargetType="{x:Type ListBoxItem}" x:Key="BillStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ns:BillItem />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在MainWindow.xaml.cs中我有:
ObservableCollection<Bill> Bills {get;set;}
在构造函数中我只添加了几个对象。
我希望以这种方式将Bill对象推送到用户控件:
UserControl BillItem (Bill BindedObject)
{ ... }
但我不知道该怎么做。
答案 0 :(得分:1)
如果我理解正确,你需要这样的东西:
<ItemsControl ItemsSource="{Binding Path=ListOfObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyUserControl MyProperty="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
MyUserControl需要具有依赖属性,因为你无法传递给构造函数:
public object MyProperty
{
get { return (object)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(object), typeof(MyUserControl), new PropertyMetadata(false));
答案 1 :(得分:0)
有一个继承自ItemsControl的项目,例如listbox,然后将对象放在VM中的ObservableCollection属性中。然后简单地绑定到ItemsControl / listbox中的该属性或whatevers ItemsSource属性
ItemSource =“{Binding MyObjectCollection}”