これが Infragistics xamDataGrid に固有のものかどうかはわかりませんが、ここに質問があります:
Infragistics xamDataGrid はプロパティ IsSynchronizedWithCurrentItem を公開します。これは、ドキュメントによると、ActiveRecord を ICollectionView を実装するデータ ソースの現在の項目と同期します。
グリッドにバインドされたオブジェクトのタイプに基づいた詳細 (ContentControl) コンテンツを含む次の MasterDetails ウィンドウがあります。
<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>
コード ビハインドでは、次のように、グリッドのデータ ソースの現在の項目と、MasterDetailsWindow のコンストラクターの詳細コントロールの DataContext との間のリンクを確立しようとしています。
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 が提供されている場合は、details が null でないかどうかをチェックするコードを実行します。それ以外の場合は、代わりに DataDetailsTemplate が提供されていると想定します。
ここで自分の考えを疑っていたでしょうが、次の dataTemplate に解決される URL を使用して、MasterDetails ウィンドウのインスタンスを構築するとします。
<DataTemplate x:Key="LogDetailsTemplate">
<Grid Margin="5,5,5,0">
<TextBox Text="{Binding Message}" TextWrapping="WrapWithOverflow"/>
</Grid>
</DataTemplate>
グリッド内のアイテムを選択すると、選択したオブジェクトの対応する Message プロパティが TextBox に表示されます。
ただし、UserControl から派生するカスタム detailsControl オブジェクトを提供すると、グリッド内の項目を選択しても、detailsControl の DataContext は変更されません。どうしてこれなの?
ティア。