扩展器IsExpanded绑定
在以下代码中:
http://msdn.microsoft.com/en-us/library/ms754027.aspx
如何将IsExpanded绑定到MyData对象列表,其中每个对象都具有IsExpanded属性?
这不起作用!
MyData is List;
GroupNode是一个包含notify属性更改属性IsExpanded的类。
因此,如果我手动打开其中一个扩展器,它应该将IsExpanded属性设置为该MyData的GroupNode的true。
这样做并不容易,因为GroupItem
的DataContext
是CollectionViewGroup
一个实例,并且该类没有IsExpanded
属性。 但是,您可以在GroupDescription
中指定转换器,允许您返回组的“名称”( CollectionViewGroup.Name
属性)的自定义值。 这个“名字”可以是任何东西; 在您的情况下,您需要它是一个包装组名称的类(例如分组键)并具有IsExpanded
属性:
这是一个例子:
public class ExpandableGroupName : INotifyPropertyChanged { private object _name; public object Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged("Name"); } } } private bool? _isExpanded = false; public bool? IsExpanded { get { return _isExpanded; } set { if (_isExpanded != value) { _isExpanded = value; OnPropertyChanged("IsExpanded"); } } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } #endregion public override bool Equals(object obj) { return object.Equals(obj, _name); } public override int GetHashCode() { return _name != null ? _name.GetHashCode() : 0; } public override string ToString() { return _name != null ? _name.ToString() : string.Empty; } }
这是转换器:
public class ExpandableGroupNameConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return new ExpandableGroupName { Name = value }; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var groupName = value as ExpandableGroupName; if (groupName != null) return groupName.Name; return Binding.DoNothing; } #endregion }
在XAML中,只需声明分组如下:
然后绑定IsExpanded
属性: