C# 在wpf中显示继承对象的最佳方式是什么?
假设我有:C# 在wpf中显示继承对象的最佳方式是什么?,c#,wpf,C#,Wpf,假设我有: public class Result { public bool Success { get; set; } public string Description { get; set; } } 然后我想添加另一个级别,如下所示: public class AssertionFailedResult : Result { public string Expected { get; set; } public string Actual { get; set;
public class Result
{
public bool Success { get; set; }
public string Description { get; set; }
}
然后我想添加另一个级别,如下所示:
public class AssertionFailedResult : Result
{
public string Expected { get; set; }
public string Actual { get; set; }
}
在WPF中,如何以一种方式显示简单结果,以另一种方式显示断言失败的结果?我希望基本上基于类型创建一个模板。如果在资源字典中创建一个DataTemplate并设置DataType属性,但不设置x:Key属性,框架将根据对象的运行时类型将DataTemplate与对象关联。不管是好是坏,继承都没有效果。换句话说,即使没有数据类型为“AssertionFailedResult”的模板,框架也不会将类型为“AssertionFailedResult”的对象绑定到数据类型为“Result”的模板
编辑:对不起,我把它倒过来了。数据模板确实具有“多态”行为。风格不是。在任何情况下,框架都应该绑定到具有更特定数据类型的数据模板 我采纳了丹尼尔的答案,并以此为例。我认为发布代码可能会有所帮助:
<Window x:Class="SampleWpfApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:SampleWpfApplication="clr-namespace:SampleWpfApplication">
<Window.Resources>
<DataTemplate DataType="{x:Type SampleWpfApplication:Result}">
<Label>Simple Result</Label>
</DataTemplate>
<DataTemplate DataType="{x:Type SampleWpfApplication:AssertionFailedResult}">
<Label>Assertion Failed!</Label>
</DataTemplate>
</Window.Resources>
<ContentControl x:Name="contentControl" Content="{Binding Path=Result}" />
</Window>
在主窗口中,我将DataContext设置为:
DataContext = new Model()
{
Result = new AssertionFailedResult()
{
Success = false,
Description = "Assertion failed",
Expected = "1",
Actual = "1"
}
};
因此,对于DataTemplate,wpf知道如何在没有任何附加方向的情况下呈现控件。再次感谢你,丹尼尔
DataContext = new Model()
{
Result = new AssertionFailedResult()
{
Success = false,
Description = "Assertion failed",
Expected = "1",
Actual = "1"
}
};