【问题标题】:Changing visibility of child controls in RowDetailsTemplate based on DataContext property基于 DataContext 属性更改 RowDetailsTemplate 中子控件的可见性
【发布时间】:2010-12-04 01:41:54
【问题描述】:
我有一个包含 RowDetailsTemplate 的 Silverlight DataGrid。 RowDetailsTemplate 包含一个带有多个 TabItem 的 TabControl。 DataGrid 将与 Contact 类型的项目绑定。 Contact 有一个名为 ContactType 的属性。当 ContactType 为 Client 时,我希望隐藏几个 TabItems。理想情况下,我想通过 DataBinding 做到这一点,但我还没有找到这样做的方法。
【问题讨论】:
标签:
silverlight
data-binding
datagrid
【解决方案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
}
}