Browse Source

Make DataTemplate match derived types.

Closes #251.
pull/261/head
Steven Kirk 11 years ago
parent
commit
3945d9d075
  1. 3
      src/Markup/Perspex.Markup.Xaml/Templates/DataTemplate.cs
  2. 37
      tests/Perspex.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs

3
src/Markup/Perspex.Markup.Xaml/Templates/DataTemplate.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Reflection;
using OmniXaml.Attributes;
using Perspex.Controls;
using Perspex.Controls.Templates;
@ -20,7 +21,7 @@ namespace Perspex.Markup.Xaml.Templates
throw new InvalidOperationException("DataTemplate must have a DataType.");
}
return DataType == data.GetType();
return DataType.GetTypeInfo().IsAssignableFrom(data.GetType().GetTypeInfo());
}
public IControl Build(object data)

37
tests/Perspex.Markup.Xaml.UnitTests/Templates/DataTemplateTests.cs

@ -0,0 +1,37 @@
// 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;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Perspex.Markup.Xaml.Templates;
using Xunit;
namespace Perspex.Markup.Xaml.UnitTests.Templates
{
public class DataTemplateTests
{
[Fact]
public void DataTemplate_Should_Match_Data_Of_Type()
{
var target = new DataTemplate { DataType = typeof(Class1) };
var data = new Class1();
Assert.True(target.Match(data));
}
[Fact]
public void DataTemplate_Should_Match_Data_Of_Derived_Type()
{
var target = new DataTemplate { DataType = typeof(Class1) };
var data = new Class2();
Assert.True(target.Match(data));
}
private class Class1 { }
private class Class2 : Class1 { }
}
}
Loading…
Cancel
Save