WPF列表框:如何绑定数据

本文关键字:绑定 数据 何绑定 列表 WPF | 更新日期: 2023-09-27 18:02:23

我有一个listBox,并添加数据给它,像这样:

for (int x = 0; x < Orchestrator.Instance.getTopicCount(); x++)
{
   listTopics.Items.Add(Orchestrator.Instance.getTopic(x));
}

但是我需要能够做一些事情,比如有文本换行和分隔行,所以我想做XAML。

微软显示:

<TextBlock Width="248" Height="24" 
Text="{Binding ElementName=lbColor, Path=SelectedItem.Content, 
Mode=OneWay}" 
x:Name="tbSelectedColor" 
Background="{Binding ElementName=lbColor, Path=SelectedItem.Content, 
Mode=OneWay}"/>

但是我真的不明白。这是我的XAML:

<ListBox Height="261" HorizontalAlignment="Left" Margin="352,38,0,0" Name="listContent"     VerticalAlignment="Top" Width="391" Grid.Column="1" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" MaxWidth="391" ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>

我怎样才能实现我想要的?(分隔线,文本换行,这样我就不用水平滚动了,还有数据绑定)

WPF列表框:如何绑定数据

要指定每个项的布局,您可以更改两个不同的内容:ItemContainerStyle,它提供用于每个ListBoxItem的ControlTemplate,或者ItemTemplate,它提供用于呈现每个数据项的DataTemplate。如果你刚刚开始使用ItemTemplate,并且还没有掌握ControlTemplates的窍门,那么ItemTemplate更容易使用。

要让你的文本换行,有两个关键的事情要做。关闭ListBox的默认水平滚动(你已经有了),并设置TextBlock的TextWrapping属性为Wrap。要获取TextBlock,你需要在ItemTemplate中定义它。下面是一个简单的模板声明内联的例子,不过您也可以将其作为资源取出。对于分隔线,我使用了最简单的方法,即只有底部黑线的边框。

<ListBox x:Name="listContent" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="0,0,0,1" BorderBrush="Black">
                <TextBlock Text="{Binding}" TextWrapping="Wrap"/>
            </Border>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

对于如何在WPF中使用数据绑定,您似乎必须首先爬上相当陡峭的学习曲线。之后你应该学习DataTemplates和ItemTemplates来获取分隔符等等。试着开始

我衷心推荐的一本书是Manning的WPF in Action

你需要定义ListBox的ItemTemplate。在您的资源中,添加以下内容:

<DataTemplate x:Key="myItemTemplate" TargetType="ListBoxItem">
    <TextBlock Text="{Binding}"/>
</DataTemplate>

假设你的getTopic方法返回一个字符串,否则使用{Binding MyTopicProperty},其中MyTopicProperty是你的Topic类的属性。根据需要自定义TextBlock

然后像这样使用你的ListBox:
<ListBox ItemTemplate="{StaticResource myItemTemplate"/>

下面是一个如何使用DataTemplate绑定listbox和RSS提要的示例:

<UserControl.Resources>
        <XmlDataProvider x:Key ="DataRSS" XPath="//item" Source="http://rss.feedsportal.com/c/629/f/502199/index.rss">< /XmlDataProvider>
    </UserControl.Resources>
<StackPanel Orientation="Horizontal"  HorizontalAlignment="Center">
            <ListBox  ItemsSource="{Binding Source={StaticResource DataRSS}}"  Height="516" Margin="0,0,32,0" Background="{x:Null}" BorderBrush="#FF627DAE">
                <ListBox.ItemTemplate >
                    <DataTemplate >
                        <Grid Width="400" Height="100"  >                                
                            <Image Source="{Binding XPath=enclosure/@url}" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"  />
                            <TextBlock TextWrapping="Wrap" Text="{Binding XPath=title}" FontWeight="Bold" Grid.Column="2"/>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>
</grid>