如何在主窗口中访问此用户控件

时间:2015-02-06 12:19:01

标签: c# wpf user-controls

我的WPF应用中有一个用户控件

 <UserControl x:Class="NewWPFApp.ProgressControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Expander Header="{Binding Path=Headerval}">
        <StackPanel Margin="10,4,0,0">
            <DataGrid
            x:Name="dataGrid"
            AutoGenerateColumns="False"
           ItemsSource="{Binding Path=records}"/>
        </StackPanel>
    </Expander>
</Grid>

在我Mainwindow时我正在做这个

<Window xmlns:NewWPFApp="clr-namespace:NewWPFApp"  x:Class="NewWPFApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>

    <ListBox x:Name="peopleListBox" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Background="AliceBlue">
                    <NewWPFApp:ProgressControl Height="100" Width="100"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>
</Grid>

我看不到输出。 如果我从数据模板中删除它,那么它可以工作。但不在数据模板中。

我缺少什么?

由于

1 个答案:

答案 0 :(得分:0)

ListBox.ItemTemplate指定如何显示添加到列表框的项目。在您的情况下,您使用自己的自定义控件。但是,与此同时,您没有向列表框中添加任何项目,因此无需显示任何内容。要填充列表框,您可以使用绑定,例如:

<ListBox ItemsSource="{Binding ItemsToBeDisplayed}" x:Name="peopleListBox" >
    ...
</ListBox>

其中ItemsToBeDisplayed是视图模型的属性(如果使用MVVM模式),它返回一组对象。如果不是,您可以在不使用绑定的情况下填充ItemsSource

var list = new List<People>();
//Add objects to a list
peopleListBox.ItemsSource = list;

我假设您拥有People课程,可以为您希望在应用程序中显示的人员建模。 People类应具有Headervalrecords属性,因为您在ProgressControl控件中使用它们。如果按照说明执行操作,则会为ProgressControl中的每个对象创建ItemsSource控件的新实例。