ダイナミック プロパティを表示し、XAML ファイルを変更せずに、Vault のカテゴリに割り当てられているプロパティを編集することができます。
Vault のカテゴリに新しいプロパティを追加すると、これらのプロパティは自動的に、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>
...
DynamicProperties
前の例では、次のコードを見てください。
ItemsSource="{Binding DynamicProperties}"
このコードはカテゴリに割り当てられている IProperty
要素のリストを取得します。IProperty
オブジェクトなどのバインドに使用できるこれらのメンバーがあります。
ListValues
: 値の定義済み一覧を持つプロパティに使用されます。Name
: プロパティの名前です。値は、最初の列に使用されます。Value
: プロパティの値を取得して設定します。DynamicProperties
はカテゴリに割り当てられているすべてのプロパティを返します。CAD では、マッピングされたプロパティのみが返されます。これは、CAD のデータ標準を直接 Vault プロパティを変更できないためです。変更を Vault マッピングを行います。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}")
ダイナミック プロパティ ラベルの詳細については、ここをクリックしてください。