using System; using System.Windows; using System.Windows.Controls; namespace Caliburn.Composition { public class ItemsControlProxy : IComposite { protected ItemsControl _control; #region IComposite Members public object Target { get { return _control; } set { _control = value as ItemsControl; } } public int ComponentCount { get { return _control.Items.Count; } } public void SetVisiblity(Visibility visibility) { _control.Visibility = visibility; } public void Add(object element) { _control.Items.Add(element); } public void Remove(object element) { _control.Items.Remove(element); } public void Insert(int index, object element) { _control.Items.Insert(index, element); } public IComposite GetNode(string path) { string[] parts = path.Split( new char[] {'/', '.'}, StringSplitOptions.RemoveEmptyEntries ); ItemsControl found = _control; foreach(string subPath in parts) { foreach(object item in found.Items) { ItemsControl control = item as ItemsControl; if(control != null && control.Name == subPath) { found = control; break; } } } ItemsControlProxy builder = new ItemsControlProxy(); builder.Target = found; return builder; } #endregion } }