2011-07-16 17 views
0

はIリストボックスを持っているので、のようにそれにデータを追加します。WPFリストボックス:データをバインドする方法は?

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

しかし、私は持っているテキストの折り返しと分周器の線のようなものを行うことができるようにする必要があるので、私はそれをXAMLをやりたいです。

Microsoftは、この例を示します

<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

は、各項目のレイアウトを指定するには、変更できる2つの異なるものがありますこれは、各データ項目のレンダリングに使用されるDataTemplateを提供します。 ItemTemplateは、あなたがまだ始めていて、まだControlTemplatesのハングアップを得ていないのであれば、使い方が簡単です。

テキストを折り返すには、2つの重要なことがあります。既に持っている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について学習する必要があります。 あなたは、私は心からお勧めできる本がマニングからアクションでWPFである

を始めるためにthisを試してみてください。

0

ListBoxのItemTemplateを定義する必要があります。あなたのリソースに 、これを追加します。

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

をごgetTopicメソッドは文字列を返すと仮定すると、MyTopicPropertyがあなたのトピッククラスのプロパティがどこにあるかそうでない{Binding MyTopicProperty}を使用しています。必要に応じてTextBlockをカスタマイズします。

次に、このようなあなたのリストボックスを使用します。各ListBoxItemに使用するのControlTemplateを提供ItemContainerStyle、またはItemTemplateに:

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

はDataTemplateを持つ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> 
関連する問題