2013-07-10 70 views
0

我有一個綁定到CollectionViewSource的ItemControl。 ItemControl項目被分組然後呈現在數據模板中。 我想達到什麼是這樣的:WPF ItemControl未正確綁定

-A-------------- 
| Aa...  | 
| Aaaa...  | 
---------------- 

-B-------------- 
| Bb...  | 
| Bbb...  | 
---------------- 

這裏是我的代碼:

XAML

<CollectionViewSource x:Key="itembyAlpha" Source="{Binding listItem}"> 
    <CollectionViewSource.GroupDescriptions> 
     <PropertyGroupDescription PropertyName="initial" /> 
    </CollectionViewSource.GroupDescriptions> 
</CollectionViewSource> 

    <ItemsControl ItemsSource="{Binding Source={StaticResource itembyAlpha}}"> 

     <!--GroupStyle--> 
     <ItemsControl.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <GroupBox Header="{Binding initial}"> 
             <ItemsPresenter /> 
            </GroupBox> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </ItemsControl.GroupStyle> 

     <!--Item Template--> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding title}"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate>    
    </ItemsControl> 

C#

public class Movie 
{ 
    public string id { get; set; } 
    public string title { get; set; } 
    public string initial { get; set; } 
} 

List<Movie> lst; 
public List<Movie> listItem 
{ 
    get { return lst; } 
    set { lst = value; } 
} 

我p roblem是,似乎這部分代碼不起作用:

<GroupBox Header="{Binding initial}"> 
    <ItemsPresenter /> 
</GroupBox> 

當我運行我的程序,結果是這樣的:

- -------------- 
| Aa...  | 
| Aaaa...  | 
---------------- 

- -------------- 
| Bb...  | 
| Bbb...  | 
---------------- 

組框的標題是空白。看來綁定不起作用。 有人可以幫我...

以前感謝。

回答

1

這是因爲你綁定到錯誤的領域。你需要綁定到group name而不是你分組的領域。嘗試somethink這樣的:

<GroupBox Header="{Binding Name}"> 
    <ItemsPresenter /> 
</GroupBox> 

每個組是一個CollectionViewGroup,它有其自身的屬性指定組頭時,您可以使用。

+0

它的作品。謝謝。 – Reyn

0

試試這樣說:

<GroupBox> 
    <GroupBox.Header> 
     <TextBlock Text="{Binding initial}"/> 
    </GroupBox.Header> 
     <ItemsPresenter /> 
    </GroupBox> 

或者

<GroupBox> 
    <GroupBox.Header> 
     <TextBlock Text="{Binding}"/> 
    </GroupBox.Header> 
     <ItemsPresenter /> 
    </GroupBox> 
0

對於像這樣的工作綁定,應該實現接口INotifyCollectionChanged。 我建議你使用ObservableCollection而不是List。

所以這個代碼:

List<Movie> lst; 
public List<Movie> listItem 
{ 
    get { return lst; } 
    set { lst = value; } 
} 

將變爲:

ObservableCollection<Movie> listItem;