Browse Source

Return InstancedBinding from TreeDataTemplate.

This hopefully fixes the part of issue #284 related to TreeDataTemplate.
MemberSelector needs a similar fix.
pull/484/head
Steven Kirk 10 years ago
parent
commit
093dd452e5
  1. 4
      src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs
  2. 3
      src/Perspex.Controls/Generators/TreeItemContainerGenerator.cs
  3. 5
      src/Perspex.Controls/Templates/FuncTreeDataTemplate.cs
  4. 9
      src/Perspex.Controls/Templates/ITreeDataTemplate.cs

4
src/Markup/Perspex.Markup.Xaml/Templates/TreeDataTemplate.cs

@ -36,12 +36,12 @@ namespace Perspex.Markup.Xaml.Templates
}
}
public IEnumerable ItemsSelector(object item)
public InstancedBinding ItemsSelector(object item)
{
if (ItemsSource != null)
{
var obs = new ExpressionObserver(item, ItemsSource.Path);
return obs.Take(1).Wait() as IEnumerable;
return new InstancedBinding(obs);
}
return null;

3
src/Perspex.Controls/Generators/TreeItemContainerGenerator.cs

@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using Perspex.Controls.Templates;
using Perspex.Data;
namespace Perspex.Controls.Generators
{
@ -76,7 +77,7 @@ namespace Perspex.Controls.Generators
var result = new T();
result.SetValue(ContentProperty, template.Build(item));
result.SetValue(ItemsProperty, template.ItemsSelector(item));
BindingOperations.Apply(result, ItemsProperty, template.ItemsSelector(item), null);
if (!(item is IControl))
{

5
src/Perspex.Controls/Templates/FuncTreeDataTemplate.cs

@ -4,6 +4,7 @@
using System;
using System.Collections;
using System.Reflection;
using Perspex.Data;
namespace Perspex.Controls.Templates
{
@ -59,9 +60,9 @@ namespace Perspex.Controls.Templates
/// </summary>
/// <param name="item">The item.</param>
/// <returns>The child items, or null if no child items.</returns>
public IEnumerable ItemsSelector(object item)
public InstancedBinding ItemsSelector(object item)
{
return this?._itemsSelector(item);
return new InstancedBinding(this?._itemsSelector(item));
}
/// <summary>

9
src/Perspex.Controls/Templates/ITreeDataTemplate.cs

@ -1,7 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Collections;
using Perspex.Data;
namespace Perspex.Controls.Templates
{
@ -14,7 +14,10 @@ namespace Perspex.Controls.Templates
/// Selects the child items of an item.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>The child items, or null if no child items.</returns>
IEnumerable ItemsSelector(object item);
/// <returns>
/// An <see cref="InstancedBinding"/> holding the items, or an observable that tracks the
/// items. May return null if no child items.
/// </returns>
InstancedBinding ItemsSelector(object item);
}
}
Loading…
Cancel
Save