は知ってはいけない:WPF理解Selector.IsSynchronizedWithCurrentItem
インフラジスティックスxamDataGridのは、彼らのマニュアルに従って、データソースの現在の項目とのActiveRecordを同期するプロパティIsSynchronizedWithCurrentItemを公開します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>
を、私は、現在の項目の間のリンクを確立しようとしています次のような詳細のDataContextのにグリッドのデータソースは、私の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オブジェクトまたは文字列repreのいずれかを提供する必要がありますURLをDataTemplateに送信します。 detailsControlが提供されている場合は、詳細がnullでないかどうかをチェックするコードを実行します。それ以外の場合は、代わりにDataDetailsTemplateが提供されていると仮定します。
は私は、次のDataTemplateに解決URLで、のMasterDetailsウィンドウのインスタンスを作成する場合、私はここに私の考えを疑ったがいるだろう :
<DataTemplate x:Key="LogDetailsTemplate">
<Grid Margin="5,5,5,0">
<TextBox Text="{Binding Message}" TextWrapping="WrapWithOverflow"/>
</Grid>
</DataTemplate>
グリッド内の項目を選択するには、選択したオブジェクトの表示しますTextBoxの対応するMessageプロパティ。
ただし、UserControlから派生したカスタムdetailsControlオブジェクトを提供し、グリッド内のアイテムを選択しても、detailsControlのDataContextは変更されません。どうしてこれなの?
TIA。
私はこれがどのようにcurrentitem同期にも接続されているとは思わない... –
dataGrid.DataSourceは明示的に自分のコレクションをラップするICollectionViewに設定されています。 dataGrid.IsSynchronizedWithCurrentItemもtrueに設定されているため、DataSource.CurrentItemへのバインディングパスを変更すると結果が変わらないため、DataSourceへのバインディングをICollectionView.CurrentItemにバインドすると思います。これは私が把握しようとしているものです:) –
あなたは、複数の場所でコレクションを使用していないし、いずれかの現実的な物を使用していない、本当に任意の違いがない場合は、プロパティをtrueに設定します。 –