WPF列表框使用模板添加项目

时间:2013-11-12 14:55:09

标签: c# wpf listbox

我到处搜索,但我没有找到任何好的示例或教程。我有一个列表框,我为它制作了一个ItemTemplate:

XAML:

  <ListBox x:Name="LB_Playlist" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Left" Height="454" Margin="0,23,0,0" VerticalAlignment="Top" Width="264" Background="{x:Null}" BorderBrush="{x:Null}" BorderThickness="0" ItemTemplate="{DynamicResource PlayListItem}" ScrollViewer.VerticalScrollBarVisibility="Hidden">
            <ListBox.Resources>
                <DataTemplate x:Key="PlayListItem">
                    <Grid d:DesignWidth="127" d:DesignHeight="105" Width="128" Height="128">
                        <Label x:Name="L_PlayListName" Content="{Binding Path=PlayList_Name}" HorizontalAlignment="Stretch" Margin="16" Width="Auto" Height="Auto" Background="#26000000" Padding="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontFamily="BankGothic Lt BT"/>
                    </Grid>
                </DataTemplate>
            </ListBox.Resources>
  </ListBox>

如何使用代码(动态)添加新项目每次使用不同的名称更改L_PlayListName内容?我需要创建一个新的类或什么?我有一个添加新项目的按钮。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

首先在代码后面创建一个集合属性:

public ObservableCollection<string> PlayListNames { get; set; }

然后BindListBox.ItemsSource

<ListBox ItemsSource="{Binding PlayListNames}" ... />

稍微更改您的XAML:

<Label x:Name="L_PlayListName" Content="{Binding}" />

这将Bind提供给每个项目的整个值,在这种情况下,这意味着该集合中的string值之一。

最后,只需设置DataContext的{​​{1}}即可。有几种方法可以做到这一点,最简单的(但不是最好的)是在Window构造函数中执行此操作:

MainWindow.xaml.cs

那就是......如果你有任何问题,请告诉我。

答案 1 :(得分:1)

<Grid x:Name="LayoutRoot">
    <ListBox Margin="10" ItemsSource="{Binding}"/>
</Grid>
在绑定前面的

你可以写表格列的名称(数据库表)

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    BindData();          
}

private void BindData()
{
    DataSet dtSet = new DataSet();
    using (connection = new SqlConnection(connectionString))
    {
        command = new SqlCommand(sql, connection);              
        SqlDataAdapter adapter = new SqlDataAdapter();          
        connection.Open();
        adapter.SelectCommand = command;
        adapter.Fill(dtSet, "Customers");
        listBox1.DataContext = dtSet;

    }
}

答案 2 :(得分:0)

如果您只是在播放列表中添加字符串,则应将模板编辑为以下内容

  <DataTemplate x:Key="PlayListItem">         
     <Label x:Name="L_PlayListName" Content="{Binding}" />           
  </DataTemplate>

但是你应该使用ObservableCollection并使它变得简单和正确。