2013-01-14 35 views
5

我有一個datagrid,其中一個組綁定到ListCollectionView。 當我填充集合,我想第一組自動查看擴展,如何編碼在wpf(codebehind或mvvm)?wpf datagrid自動擴展第一組

<DataGrid 
    ItemsSource="{Binding ResultColl}" 
    SelectedItem="{Binding Path=SelectedResultItem, Mode=TwoWay}" 
    SelectionMode="Single" IsReadOnly="True" > 
    <DataGrid.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.ContainerStyle> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type GroupItem}"> 
           <Expander> 
            <Expander.Header> 
             <StackPanel> 
               <TextBox Text="{Binding Items[0].ID}" /> 
             </StackPanel> 
            </Expander.Header> 
            <ItemsPresenter /> 
           </Expander> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </GroupStyle.ContainerStyle> 
     </GroupStyle> 
    </DataGrid.GroupStyle> 

    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=ID}"/> 
     <DataGridTextColumn Binding="{Binding Path=Typ}"/> 
     <DataGridTextColumn Binding="{Binding Path=Info}"/> 
     <DataGridTextColumn Binding="{Binding Path=orderDate, StringFormat={}{0:dd-MM-yyyy}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

在MVVM控制器:

ListCollectionView tmp = new ListCollectionView(myList); 
tmp.GroupDescriptions.Add(new PropertyGroupDescription("ID")); 
ResultColl = tmp; 
... 
ListCollectionView _resultColl; 
public ListCollectionView ResultColl 
{ 
    get { return _resultColl; } 
    set { _resultColl = value; 

     RaisePropertyChanged("ResultColl"); 
     if (value != null && _resultColl.Count > 0) 
      SelectedResultItem = _resultColl.GetItemAt(0) as ItemResult; 
    } 
} 

當執行代碼時,數據網格被填充的第一項被選擇,但組已摺疊。

+0

這是太模糊,你嘗試過這麼遠嗎? – akjoshi

+0

我試圖在設置collectionview後設置SelectedItem屬性 – alexn234

回答

11

添加IsExpanded屬性類,並添加綁定到擴展:

<Expander IsExpanded="{Binding Items[0].IsExpanded}"> 

設置IsExpanded的第一個真正的

+0

好吧,這工作,我想知道它是否只能在xaml代碼中完成。 – alexn234

2

你可以嘗試另一種布爾屬性添加到您的視圖模型默認爲事實,但切換到第一次使用時爲假。並且使用OneTime模式將Expander的IsExpanded屬性綁定到此。

public bool IsExpanded 
    { 
     get 
     { 
      if (_isExpanded) 
      { 
       _isExpanded = false; 
       return true; 
      } 
      return false; 
     } 
    } 

的XAML會是這樣的:

<Expander IsExpanded="{Binding DataContext.IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Mode=OneTime}"> 
+0

這也是一個很好的方法,會試試看 – alexn234