Browse Source

Added IDataTemplate interface.

pull/39/head
Steven Kirk 11 years ago
parent
commit
e0960f5891
  1. 12
      Perspex.Controls/DataTemplate.cs
  2. 8
      Perspex.Controls/DataTemplateExtensions.cs
  3. 2
      Perspex.Controls/DataTemplates.cs
  4. 2
      Perspex.Controls/Generators/TreeItemContainerGenerator.cs
  5. 15
      Perspex.Controls/IDataTemplate.cs
  6. 1
      Perspex.Controls/Perspex.Controls.csproj
  7. 2
      Perspex.Controls/Presenters/ContentPresenter.cs

12
Perspex.Controls/DataTemplate.cs

@ -9,7 +9,7 @@ namespace Perspex.Controls
using System;
using System.Reflection;
public class DataTemplate
public class DataTemplate : IDataTemplate
{
public static readonly DataTemplate Default =
new DataTemplate(typeof(object), o => new TextBlock { Text = o.ToString() });
@ -41,6 +41,16 @@ namespace Perspex.Controls
{
return t.GetTypeInfo().IsAssignableFrom(o.GetType().GetTypeInfo());
}
bool IDataTemplate.Match(object data)
{
return this.Match(data);
}
Control IDataTemplate.Build(object data)
{
return this.Build(data);
}
}
public class DataTemplate<T> : DataTemplate

8
Perspex.Controls/DataTemplateExtensions.cs

@ -14,7 +14,7 @@ namespace Perspex.Controls
{
public static Control ApplyDataTemplate(this Control control, object data)
{
DataTemplate result = control.FindDataTemplate(data);
IDataTemplate result = control.FindDataTemplate(data);
if (result != null)
{
@ -30,12 +30,12 @@ namespace Perspex.Controls
}
}
public static DataTemplate FindDataTemplate(this Control control, object data)
public static IDataTemplate FindDataTemplate(this Control control, object data)
{
// TODO: This needs to traverse the logical tree, not the visual.
foreach (var i in control.GetSelfAndVisualAncestors().OfType<Control>())
{
foreach (DataTemplate dt in i.DataTemplates.Reverse())
foreach (IDataTemplate dt in i.DataTemplates.Reverse())
{
if (dt.Match(data))
{
@ -48,7 +48,7 @@ namespace Perspex.Controls
if (global != null)
{
foreach (DataTemplate dt in global.DataTemplates.Reverse())
foreach (IDataTemplate dt in global.DataTemplates.Reverse())
{
if (dt.Match(data))
{

2
Perspex.Controls/DataTemplates.cs

@ -8,7 +8,7 @@ namespace Perspex.Controls
{
using Perspex.Collections;
public class DataTemplates : PerspexList<DataTemplate>
public class DataTemplates : PerspexList<IDataTemplate>
{
}
}

2
Perspex.Controls/Generators/TreeItemContainerGenerator.cs

@ -52,7 +52,7 @@ namespace Perspex.Controls.Generators
private TreeDataTemplate GetTreeDataTemplate(object item)
{
DataTemplate template = this.Owner.FindDataTemplate(item);
IDataTemplate template = this.Owner.FindDataTemplate(item);
if (template == null)
{

15
Perspex.Controls/IDataTemplate.cs

@ -0,0 +1,15 @@
// -----------------------------------------------------------------------
// <copyright file="IDataTemplate.cs" company="Steven Kirk">
// Copyright 2014 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Controls
{
public interface IDataTemplate
{
bool Match(object data);
Control Build(object data);
}
}

1
Perspex.Controls/Perspex.Controls.csproj

@ -36,6 +36,7 @@
<ItemGroup>
<Compile Include="Border.cs" />
<Compile Include="Button.cs" />
<Compile Include="IDataTemplate.cs" />
<Compile Include="RadioButton.cs" />
<Compile Include="CheckBox.cs" />
<Compile Include="ColumnDefinition.cs" />

2
Perspex.Controls/Presenters/ContentPresenter.cs

@ -110,7 +110,7 @@ namespace Perspex.Controls.Presenters
}
else
{
DataTemplate dataTemplate = this.FindDataTemplate(content);
IDataTemplate dataTemplate = this.FindDataTemplate(content);
if (dataTemplate != null)
{

Loading…
Cancel
Save