2014-05-17 143 views
1

我是WPF新手,我想從xaml綁定到ObservableCollection。目前,我做這樣的:將datagrid綁定到ObservableCollection列表

在XAML

<Grid Grid.Column="1"> 
      <local:ProcessingStep DataContext="{Binding ProcessingSteps[0]}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</Grid> 
<Grid Grid.Column="2"> 
<local:ProcessingStep DataContext="{Binding ProcessingSteps[1]}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</Grid> 
<Grid Grid.Column="3"> 
    <local:ProcessingStep DataContext="{Binding ProcessingSteps[2]}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
</Grid> 
在CS

public ObservableCollection<ProcessingStepView> ProcessingSteps 
{ 
    get 
    { 
     return m_ProcessingSteps ?? 
      (m_ProcessingSteps = new ObservableCollection<ProcessingStepViewl> 
         { 
          new ProcessingStepView("Step1"), 
          new ProcessingStepView("Step2"), 
          new ProcessingStepView("Step3") 
         }); 
     } 
} 

我怎樣才能綁定列表直接WPF?例如:如果我有100個步驟,那麼一個接一個地做是不好的。

+0

如何安排列中的項目?他們有相同的寬度或目的只是將它們水平堆疊? – dkozl

+0

我想將它們水平堆疊 – olidev

回答

2

您可以使用ItemsControlItemTemplate和綁定列表:

<ItemsControl ItemsSource="{Binding ProcessingSteps}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <local:ProcessingStep /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

ItemsControl基本上只是一箇中繼器,無需選擇,這將重複ItemTemplate多次,許多項目也有在ProcessingSteps並將其放置在無論你選擇哪一個面板。在這種情況下,水平方向StackPanel

+0

太棒了。有用。我今天學到了一課。謝謝@dkozl – olidev

+0

沒問題@olidev。順便說一句,如果你默認不提供'ItemsPanel',它將使用垂直的'StackPanel',但你可以像Grid,WrapPanel,Canvas或UniformGrid一樣將其更改爲任何你想要的Panel。每個列表控件都從'ItemsControl'繼承,例如'ListBox'是'ItemsControl',其頂部添加了項目選擇功能,但機制保持不變 – dkozl