Не знаю, относится ли это к Infragistics xamDataGrid, но здесь возникает вопрос:
Infragistics xamDataGrid предоставляет свойство IsSynchronizedWithCurrentItem, которое в соответствии с их документацией синхронизирует ActiveRecord с текущим элементом источника данных, который реализует ICollectionView.
У меня есть следующее окно MasterDetails с содержимым деталей (ContentControl), основанным на типе объектов, привязанных к сетке:
<DockPanel Name="dockPanel" LastChildFill="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="5" MaxHeight="5"/>
<RowDefinition/>
</Grid.RowDefinitions>
<igDP:XamDataGrid
Name="dataGrid"
IsSynchronizedWithCurrentItem="True"
SelectedItemsChanged="dataGrid_SelectedItemsChanged">
</igDP:XamDataGrid>
<GridSplitter
Style="{StaticResource blueHrizontalGridSplitter}"
Grid.Row="1" Grid.ColumnSpan="2"
BorderThickness="1" Margin="1,0"
HorizontalAlignment="Stretch" />
<ContentControl Grid.Row="2" Name="contentControl" />
</Grid>
</DockPanel>
В коде позади я пытаюсь установить ссылкумежду текущим элементом источника данных сетки и DataContext элемента управления details в конструкторе моего MasterDetailsWindow следующим образом:
if (detailsControl != null)
{
var fwDControl = detailsControl as FrameworkElement;
if (fwDControl != null)
{
var b = new Binding() { ElementName = "dataGrid", Path = new PropertyPath("DataSource") };
fwDControl.SetBinding(DataContextProperty, b);
}
contentControl.Content = detailsControl;
}
else
{
var b = new Binding() { ElementName = "dataGrid", Path = new PropertyPath("DataSource") };
contentControl.SetBinding(ContentProperty, b);
b = new Binding("DataDetailsTemplate");
contentControl.SetBinding(ContentTemplateProperty, b);
}
При создании экземпляра MasterDetails вызывающая сторона должна предоставить либо объект detailsControl, либострока, представляющая URL-адрес для DataTemplate.Если предоставляется detailsControl, я выполняю код, который проверяет, не являются ли детали пустыми.В противном случае, я предполагаю, что вместо этого предоставляется DataDetailsTemplate.
Я бы сомневался в этом, но если бы я создал экземпляр окна MasterDetails с URL-адресом, который разрешается в следующем dataTemplate:
<DataTemplate x:Key="LogDetailsTemplate">
<Grid Margin="5,5,5,0">
<TextBox Text="{Binding Message}" TextWrapping="WrapWithOverflow"/>
</Grid>
</DataTemplate>
при выборе элемента в сетке отображает соответствующее свойство сообщения выбранного объекта в TextBox.
Однако, если я предоставлю пользовательский объект detailsControl, производный от UserControl, выбор элемента в сетке не приведет к изменению DataContext моего detailsControl.Почему это?
TIA.