2011-03-01 48 views
0

我與RowDetialsVisibilityMode設置一個DataGrid到VisibleWhenSelected和RowDetailsTemplate相應的設置。當用戶選擇一行時,細節就會顯示,完全如上所述。然而,在查看細節之後,用戶想要再次隱藏行細節而不顯示另一行的細節。這最好如何完成。如何隱藏一個DataGrid明細行

更新:正如評論所說,可能是最好的辦法是細節排隱藏的行中的按鈕,但當時我不知道會是什麼綁定是什麼樣子?

+0

你想在一個按鈕行細節摺疊行細節? – foson

回答

3

由於該功能是基於演示-,我創建的按鈕行爲會崩潰行

public class CollapseRowAction : TriggerAction<ButtonBase> 
{ 
    public CollapseRowAction() {} 
    protected override void Invoke(object o) 
    { 
     var dg = FindVisualParent<DataGrid>(this.AssociatedObject); 
     if (dg != null) 
      dg.SelectedIndex = -1; 

    } 

    private static T FindVisualParent<T>(DependencyObject child) where T : DependencyObject 
    {  

     DependencyObject parentObject = VisualTreeHelper.GetParent(child); 
     if (parentObject == null) return null; 

     T parent = parentObject as T; 
     if (parent != null) 
     { 
      return parent; 
     } 
     else 
     { 
      return FindVisualParent<T>(parentObject); 
     } 
    } 
} 

而在XAML:

<sdk:DataGrid.RowDetailsTemplate> 
<DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <!--... However row details are presented ...--> 
     <Button Margin="10" Content="Collapse"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="Click"> 
        <myTriggers:CollapseRowAction/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
     </Button> 
    </StackPanel> 
</DataTemplate> 
</sdk:DataGrid.RowDetailsTemplate> 
+0

其實這並沒有如預期那麼回事。一旦我們設置DetailsVisibility屬性明確該行不再根據其設置爲VisibleWhenSelected的DataGrid.RowDetailsVisibilityMode設置的行爲。建議? –

+0

具有+/-切換按鈕創建一個列時,切換行的細節,我在現實生活中做到了這一點。我將RowDetialsVisibilityMode設置爲Collapsed,然後我將按鈕的行爲設置爲從Collapsed到Visible來回切換,或者在代碼隱藏中在按鈕IsPressed和Row的DetailsVisibility之間創建了綁定(使用ValueConverter)(必須在代碼中,而不是XAML,直到SL5出現強大的RelativeSource綁定)。有意義的博客關於它... – foson

+0

我已經編輯了答案,取消選擇該行,從而隱藏行的細節,而不是改變DetailVisibility,正如你所說,不起作用。 – foson