Я думаю, что часть проблемы в том, что вы все еще думаете о WinForms. Вместо привязки Grid к таблице, как насчет привязки ListBox к коллекции?
Попробуйте вместо этого:
1) Создайте другой класс, который реализует INotifyPropertyChanged. Мы собираемся использовать этот класс для DataContext. Думайте об этом как о вашем BindingEngine. Я обычно делаю это DataContext самого окна, делая его доступным в любом месте окна.
2) Предоставьте свойство в новом классе ObservableCollection, где YourType - это другой класс, который реализует INotifyPropertyChanged и предоставляет свойства данных, которые вы хотите отобразить.
3) Создайте метод в Engine, который заполняет вашу Коллекцию. Затем запустите событие PropertyChanged при его заполнении.
4) Привязать источник элементов ListBox к свойству.
5) Создайте ItemTemplate и используйте имена свойств из YourType для привязки.
Это псевдо-код, но он должен вас приблизить:
<Window>
<Window.Resources>
<ObjectDataProvider x:Key="MyEngineDS" ObjectType="{x:Type MyEngine:MyEngineNamespace}" d:IsDataSource="True"/>
<DataTemplate x:Key="ItemTemplate1">
<TextBlock Text="{Binding MyPropertyName}" />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<Binding Mode="OneWay" Source="{StaticResource MyEngineDS}"/>
</Window.DataContext>
<Grid x:Name="LayoutRoot">
<ListBox ItemsSource="MyCollection" ItemTemplate="{DynamicResource ItemTemplate1}" />
</Grid>
</Window>
Надеюсь, это поможет.