ユーザーがデザイナーで編集できるカスタム WF4 アクティビティのオブジェクトのコレクションがあります。DialogPropertyValueEditor を使用して、コレクション内の項目の追加\編集\削除に使用できる PropertyGrid からエディター ダイアログをポップアップします。
DialogPropertyValueEditor のコンストラクターで、InlineEditorTemplate を、現在コレクション内にあるアイテムの数を表示する TextBlock を含む単純な DataTemplate に設定します。
public class DataSourceFieldMappingsPropertyEditor : DialogPropertyValueEditor
{
public DataSourceFieldMappingsPropertyEditor()
{
base.InlineEditorTemplate = EditorDataTemplatesResources.GetGenericListDialogDataTemplate();
}
public override void ShowDialog(PropertyValue propertyValue, System.Windows.IInputElement commandSource)
{
//display dialog
}
}
DataTemplate は次のようになります。
<DataTemplate x:Key="editorDataTemplatesGenericListDialog">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding Path=Value,
Converter={StaticResource ResourceKey=GenericListConverter}, Mode=OneWay, pdateSourceTrigger=PropertyChanged}" />
<sapp:EditModeSwitchButton Grid.Column="1" TargetEditMode="Dialog" />
</Grid>
GenericListConverter は単にコレクションを見て、「0 アイテム」、「5 アイテム」などを表示します。
私の質問は、基になるコレクションが変更されたときに InlineEditorTemplate を自動的に更新するにはどうすればよいですか。InlineEditorTemplate の DataContext は PropertyValue ですが、なぜかバインディングが PropertyChanged イベントにフックされません。
デザイナーでアクティビティをクリックして戻ってきて、カウント表示が更新されていることを確認する必要があります。