У нас есть GridControl
, и мы присваиваем ItemsSource
коллекции элементов интерфейса.Интерфейс, используемый в коллекции, наследуется от другого интерфейса, и проблема, с которой мы сталкиваемся, состоит в том, что в элементе GridControl
отображаются только элементы, непосредственно определенные в интерфейсе верхнего уровня. Ниже приведен очень упрощенный примерповедение, которое мы наблюдаем.
код xaml, определяющий 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; }
}
Интерфейс уровня 2
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
отображается в сетке.
Есть ли обходной путь для этого?Как мы можем получить все свойства от унаследованных интерфейсов, чтобы показать также?