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és par un fichier XAML colonnes contrôle 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, Zone combinée pour les propriétés comportant une liste prédéfinie de valeurs, DataPicker pour des propriétés de type Date).
La grille de données de contrôle
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 ( la valeur cellStyle = " {StaticResourceDynamicDataGridCellStyle} ) qui a également ajouté au fichier XAML dans la section Ressources. 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> ...
XAML liaison DynamicProperties
Regardez cette ligne de code dans l'exemple précédent :
propriété ItemsSource = " {Binding DynamicProperties} "
Ce code Extrait une liste des iPropriétés les éléments qui sont affectés à la catégorie. La boîte de dialogue iPropriétés de l'objet, entre autres, les membres qui peuvent être utilisées dans les liaisons :
XAML liaison DynamicPropertiesCategory
Pour que la DynamicProperties liaison renvoie un élément, une catégorie de coffre-fort doit être spécifié. Dans la mise en oeuvre par défaut fourni avec Data Standard, le DynamicPropertiesCategory extrait spécifié à l'aide d'une zone combinée :
... <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 Vault ( propriété 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 :
( Elément sélectionné = "{Binding DynamicPropertiesCategory}" )
Cliquez ici pour en savoir plus sur les étiquettes des propriétés dynamiques.