ダイナミック プロパティ

ダイナミック プロパティを表示し、XAML ファイルを変更せずに、Vault のカテゴリに割り当てられているプロパティを編集することができます。

Vault のカテゴリに新しいプロパティを追加すると、これらのプロパティは自動的に、Data Standard ダイアログまたはタブが表示され、次に表示されます。

Data Standard ダイアログおよびタブで使用できるダイナミック プロパティ

ダイナミック プロパティの 2 つの柱がある XAML DataGrid コントロールによって表されます。最初の列は読み込み専用で、プロパティの名前を表示します。2 番目の列はより複雑です。なぜなら、さまざまなタイプに対してさまざまなコントロールを表示する必要があるからです(例: 値の定義済み一覧があるプロパティには ComboBox、日付タイプのプロパティには DataPicker)。

データグリッド コントロール

ダイアログには、ダイナミック プロパティ(Dynamic Properties)コントロールを追加するには、次の行が必要です。

...
                <DataGrid x:Name="DSDynamicCategoryProperties"
                      AutoGenerateColumns="False"
                      HeadersVisibility="Column"
                      ItemsSource="{Binding DynamicProperties}"
                      ScrollViewer.CanContentScroll="False"
                      HorizontalGridLinesBrush="WhiteSmoke"
                      VerticalGridLinesBrush="WhiteSmoke">
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Name}"
                                        SortDirection="Ascending"
                                        Width="140"
                                        IsReadOnly="True" >
                            <DataGridTextColumn.HeaderTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding DataContext.UIString[LBL64], RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                                </DataTemplate>
                            </DataGridTextColumn.HeaderTemplate>
                        </DataGridTextColumn>
                        <DataGridTemplateColumn CellStyle="{StaticResource DynamicDataGridCellStyle}"
                                            Width="*" >
                            <DataGridTemplateColumn.HeaderTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding DataContext.UIString[LBL65], RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.HeaderTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>
...

2 番目の列は、スタイル (cellstyle="{staticresourcedynamicdatagridcellstyle})(リソースのセクションで XAML ファイルに追加する必要があります)を使用します。これは、すべての異なるコントロールになります。

...
  <Window.Resources>
        <Style x:Key="DynamicDataGridCellStyle" TargetType="{x:Type DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <ComboBox ItemsSource="{Binding ListValues}" Text="{WPF:ValidatedBinding Value}" IsEditable="True"></ComboBox>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                </Trigger>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
                </Trigger>
                <DataTrigger Binding="{Binding ListValues.Count}" Value="0">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <TextBox Text="{WPF:ValidatedBinding Value}"></TextBox>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Typ}" Value="DateTime">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <DatePicker SelectedDate="{WPF:ValidatedBinding Value, StringFormat='dd/MM/yyyy'}"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding Typ}" Value="Bool">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <ComboBox Text="{WPF:ValidatedBinding Value}">
                                    <system:Boolean>True</system:Boolean>
                                    <system:Boolean>False</system:Boolean>
                                </ComboBox>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
...

XAML バインド DynamicProperties

前の例では、次のコードを見てください。

ItemsSource="{Binding DynamicProperties}"

このコードはカテゴリに割り当てられている IProperty 要素のリストを取得します。IProperty オブジェクトなどのバインドに使用できるこれらのメンバーがあります。

注: Vault の Data Standard では、DynamicProperties はカテゴリに割り当てられているすべてのプロパティを返します。CAD では、マッピングされたプロパティのみが返されます。これは、CAD のデータ標準を直接 Vault プロパティを変更できないためです。変更を Vault マッピングを行います。

XAML バインド DynamicPropertiesCategory

DynamicProperties バインドが何かを返すようにするには、Vault カテゴリを最初に指定する必要があります。データ標準に付属の既定の実装では、DynamicPropertiesCategory はコンボ ボックスで指定します。

...
<ComboBox
    Name="Categories"
    ItemsSource="{Binding PsList[GetCategories]}"
    SelectedIndex="0"
    DisplayMemberPath="Name"
    selecteditem="{binding-dynamicpropertiescategory}"
    Text="{Binding Prop[_Category].Value}" Grid.Row="0" Grid.Column="1"
    IsEnabled="{Binding IsNewEntryDialog}">
</ComboBox>
...

使用可能な Vault カテゴリ (ItemsSource="{Binding PsList[GetCategories]}") のリストは、PowerShell 関数 GetCategories によって返されます。既定の実装では、このすべてのカテゴリを返します。特定のカテゴリ(たとえば、ドキュメント タイプに基づいて)する必要がある場合にのみ、この機能を調整する必要があります。

コンボ ボックスから選択されたカテゴリは DynamicPropertiesCategory を設定します。

(selecteditem="{binding-dynamicpropertiescategory}")

ダイナミック プロパティ ラベルの詳細については、ここをクリックしてください。