我想用列表框制作一个wpf用户控件。在此列表框中,我添加了一个stackpanel作为列表框项。但是当我想在应用程序中使用我的用户控件时,此用户控件不显示任何数据。
这里是用户控件的xaml代码
<Grid>
<ListBox x:Name="lb" >
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
我在列表框中添加数据
StackPanel sp1 = new StackPanel();
sp1.Children.Add(someuielement);// some ui element i generate dynamically
lb.Items.Add(sp1);
我的问题是如何在主应用程序中显示数据。我没有使用任何绑定,也无法弄清楚如何做到这一点。
感谢
答案 0 :(得分:0)
推荐的方法是使用视图模型并将其绑定到ListBox的Items属性。像这样:
<ListBox ItemsSource="{Binding DataItems}">...
然后在代码隐藏中而不是动态生成ui元素,您只需将视图模型绑定到控件或父窗口。
lb.DataContext = new MyViewModel();
可能如下所示:
class MyViewModel : ObservableObject
{
public ObservableCollection<MyDataItem> DataItems {get; private set;}
public MyViewModel()
{
this.DataItems = new ObservableCollection<MyDataItem>();
}
}
在此处查看简单的ObservableObject
实现:
http://justinmchase.com/2010/08/26/observableobject-for-wpf-mvvm/