WPF用户控件:WPF应用程序中未显示的列表框项

时间:2015-06-09 06:52:25

标签: c# wpf xaml data-binding wpf-controls

我想用列表框制作一个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);

我的问题是如何在主应用程序中显示数据。我没有使用任何绑定,也无法弄清楚如何做到这一点。

感谢

1 个答案:

答案 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/