我们有一个GridControl
,我们正在将ItemsSource
分配给一系列界面项。集合中使用的接口继承自另一个接口,而我们遇到的问题是,GridControl
下面是我们看到的行为的非常简化的示例。
GridControl
的xaml代码<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;
}
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
界面中明确定义的项目在网格中。
有什么解决方法吗?我们如何从继承的接口中获取所有属性以显示出来?
答案 0 :(得分:1)
可行的一点技巧是将顶级接口投射到对象。它将诱使网格控件根据具体实现自动生成列,这将为您提供所有属性。
DataGrid.ItemsSource = concreteItemCollection.Select(x => (object)x);