Les propriétés dynamiques vous permettent d'afficher et de modifier les propriétés qui sont affectés à une catégorie de coffre-fort sans avoir besoin de modifier le fichier XAML.
Lors de l'ajout de nouvelles propriétés à une catégorie de coffre-fort, ces propriétés s'affichent automatiquement la prochaine fois que la boîte de dialogue Data Standard ou l'onglet est affiché.
Les propriétés dynamiques sont représentées par un contrôle DataGrid XAML qui comporte deux colonnes. La première colonne est en lecture seule et affiche le nom de propriété. La deuxième colonne est plus complexe, car elle a pour afficher différentes commandes de types différents (par exemple, ComboBox pour les propriétés comportant une liste prédéfinie de valeurs, DataPicker pour les propriétés de type Date).
Pour ajouter les propriétés dynamiques à la boîte de dialogue, les lignes suivantes sont requises :
...
<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>
...
La deuxième colonne utilise un style (cellstyle="{staticresourcedynamicdatagridcellstyle}) qui doit également être ajouté au fichier XAML dans la section Resources. Il prend en charge tous les différents contrôles :
...
<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>
...
DynamicPropertiesRegardez cette ligne de code dans l’exemple précédent :
ItemsSource="{Binding DynamicProperties}"
Ce code extrait une liste d’éléments IProperty qui sont affectés à la catégorie. L’objet IProperty inclut, entre autres, ces membres qui peuvent être utilisés dans les liaisons :
ListValues : utilisé pour les propriétés comportant une liste prédéfinie de valeurs.Name : nom de la propriété. La valeur est utilisée pour la première colonne.Value : pour obtenir et définir la valeur de la propriété.DynamicProperties renvoie toutes les propriétés affectées à une catégorie. Tandis que pour la CAO, seules les propriétés mappées sont renvoyés. Cela est dû au fait que Data Standard pour la CAO ne permet pas de modifier directement les propriétés de coffre-fort. Les modifications sont effectuées dans Vault.DynamicPropertiesCategoryPour que la liaison DynamicProperties renvoie quelque chose, une catégorie de coffre-fort doit être spécifiée. Dans la mise en œuvre par défaut fournie avec Data Standard, l’attribut DynamicPropertiesCategory est spécifié à l’aide d’une zone déroulante :
...
<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>
...
La liste des catégories de coffres-forts disponibles (ItemsSource="{Binding PsList[GetCategories]}") est renvoyée par une fonction PowerShell GetCategories. Dans la mise en oeuvre par défaut, juste renvoie toutes les catégories. Si seulement certaines catégories doit être disponible (par exemple, en fonction du type de document), cette fonction doit être ajusté.
La catégorie sélectionnée dans la zone de liste combinée définit la DynamicPropertiesCategory :
(selecteditem="{binding-dynamicpropertiescategory}")
Cliquez ici pour en savoir plus sur les étiquettes des propriétés dynamiques.