0

ユーザーがデザイナーで編集できるカスタム 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 イベントにフックされません。

デザイナーでアクティビティをクリックして戻ってきて、カウント表示が更新されていることを確認する必要があります。

4

0 に答える 0