1

我到处搜索,但没有找到任何好的示例或教程。我有一个列表框,并为它制作了一个 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 内容以不同的名称添加新项目?我需要开一个新课还是什么?我有一个添加新项目的按钮。我怎样才能做到这一点?

4

3 回答 3

2

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

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

然后Bind这个到ListBox.ItemsSource

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

稍微改变你的 XAML:

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

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

最后,只需设置您DataContextWindow. 有几种方法可以做到这一点,最简单的(但不是最好的)是在你的MainWindow.xaml.cs构造函数中做到这一点:

DataContext = this;

就是这样......如果您有任何问题,请告诉我。

于 2013-11-12T15:07:23.447 回答
1
<Grid x:Name="LayoutRoot">
    <ListBox Margin="10" ItemsSource="{Binding}"/>
</Grid>

在 Binding 前面你可以写表列的名称(数据库表)

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;

    }
}
于 2013-11-12T15:15:52.087 回答
0

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

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

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

于 2013-11-12T15:08:13.040 回答