2009-10-05 94 views
2

我有一個包含RowDetailsTemplate的Silverlight DataGrid。 RowDetailsTemplate包含一個帶有多個TabItem的TabControl。 DataGrid將被綁定到Contact類型的項目。聯繫人有一個名爲ContactType的屬性。我想在ContactType爲Client時隱藏幾個TabItem。理想情況下,我想通過DataBinding來做到這一點,但我還沒有找到這樣做。基於DataContext屬性更改RowDetailsTemplate中子控件的可見性

回答

1

使用將ContactType轉換爲Visiblity的值轉換器將RowDetailTemplate中的TabItem.Visibility綁定到ContactType。您應該將ContactTypeConverter添加到應用程序或頁面中作爲資源。

<TabItem 
    Visibility="{Binding ContactType, Converter={StaticResource ContactTypeConverter}}"/> 

namespace Demo 
{ 
using System; 
using System.Windows; 
using System.Windows.Data; 

public enum ContactType 
{ 
    Client 
}; 

/// <summary> 
/// A Value converter 
/// </summary> 
public class ContactTypeConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var contactType = (ContactType) value; 

     switch (contactType) 
     { 
      case ContactType.Client: 
       return Visibility.Visible; 

      default: 
       return Visibility.Collapsed; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 

    #endregion 
} 
}