2011-07-16 63 views
0

我有一个列表框和数据添加到它,像这样:WPF 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"/> 

我怎么能够实现我想要的? (分隔线,文本换行,所以我不必水平滚动和数据绑定)

回答

1

指定每个项目的布局,有两种不同的东西,你可以改变:在ItemContainerStyle,它提供用于每个ListBoxItem的的控件模板,或者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> 
1

看来你将不得不提升对如何在WPF首先使用数据绑定相当陡峭的学习曲线。此后,您应该了解DataTemplates和ItemTemplates以获取分隔线等等。 尝试this,让你开始

一本书,我可以尽情地建议是从曼宁WPF在行动

0

您需要定义你的ListBox的ItemTemplate中。 在你的资源,补充一点:

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

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

然后用你的ListBox的是这样的:

<ListBox ItemTemplate="{StaticResource myItemTemplate"/> 
0

这里是如何绑定RSS源列表框与DataTemplate的一个例子:

<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>