我们有一个GridControl
并且我们正在将其分配ItemsSource
给一个界面项的集合。集合中使用的接口继承自另一个接口,我们遇到的问题是只有在顶层接口中直接定义的项目才会显示在GridControl
下面是我们所看到的行为的一个非常简化的示例。
xml代码定义GridControl
<Window x:Class="WpfThrowaway.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfThrowaway"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<dxg:GridControl x:Name="DataGrid" Background="#363636" Foreground="#FFFFFF" EnableSmartColumnsGeneration="True" AutoGenerateColumns="AddNew">
<dxg:GridControl.View >
<dxg:TableView x:Name="TableView" AllowEditing="False" />
</dxg:GridControl.View>
</dxg:GridControl>
</Grid>
</Window>
具体项目实施
class ConcreteItem : ILevel1
{
public string Level1String => "Level 1 string";
public double Level2Double => 2;
}
1级接口(ItemsSource
集合中使用的类型)
interface ILevel1 : ILevel2
{
string Level1String { get; }
}
二级接口
interface ILevel2
{
double Level2Double { get; }
}
后面的代码ItemsSource
初始化MainWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var concreteItemCollection = new List<ILevel1>();
for(var i = 0; i < 100; i++)
{
concreteItemCollection.Add(new ConcreteItem());
}
DataGrid.ItemsSource = concreteItemCollection;
}
}
生成的数据网格
我们想要并且期望的是GridControl
显示两列Level1String
和,但只有在界面中Level2Double
明确定义的项目才会显示在网格中。ILevel1
有什么解决方法吗?我们如何让继承接口的所有属性也显示出来?