Dynamische Eigenschaften können Sie zum Anzeigen und Bearbeiten von Eigenschaften, die einem Tresor ohne Kategorie zum Bearbeiten der XAML-Datei.
Beim Hinzufügen neuer Eigenschaften in einem Tresor Kategorie, erscheinen diese automatisch das nächste Mal, wenn das Dialogfeld Data Standard oder Registerkarte angezeigt wird.
Die dynamischen Eigenschaften werden durch eine XAML-Datei DataGrid mit zwei Spalten. Die erste Spalte ist schreibgeschützt und zeigt den Namen der Eigenschaft an. Die zweite Spalte ist komplizierter, da er, um verschiedene Steuerelemente für verschiedene Typen (z. B. Kombinationsfeld für Eigenschaften mit einer vordefinierten Liste von Werten DataPicker für Eigenschaften des Typs Datum).
DataGrid steuern
So fügen Sie die dynamischen Eigenschaften steuern können, werden die folgenden Zeilen benötigt:
... <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> ...
Die zweite Spalte verwendet einen Stil ( cellStyle = " {StaticResourceDynamicDataGridCellStyle} ), die auch hinzugefügt werden, um die XAML-Datei in der Ressourcen. Diese übernimmt alle anderen Steuerelemente:
... <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 Bindung DynamicProperties
Betrachten Sie diese Code-Zeile im vorherigen Beispiel:
ItemsSource = " {Binding DynamicProperties }
Dieser Code wird eine Liste der iProperty Elemente an, die der Kategorie zugeordnet sind. Die iProperty Objekt hat unter anderem folgende Mitglieder, die verwendet werden können, in Bindungen:
XAML Bindung DynamicPropertiesCategory
In der DynamicProperties binden Gibt eine Kategorie, einen Tresor muss angegeben werden. Die vorgegebene Implementierung mit Data Standard, der DynamicPropertiesCategory Ruft die durch ein Kombinationsfeld:
... <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> ...
Die Liste der verfügbaren Vault Kategorien ( ItemsSource = "{Binding PsList [GetCategories] }" ) zurückgegeben wird durch eine PowerShell-Funktion GetCategories. Die vorgegebene Implementierung dieser gibt nur alle Kategorien. Wenn Sie nur bestimmte Kategorien verfügbar sein sollte (z. B. basierend auf Dokumenttyp), diese Funktion muss angepasst werden.
Die ausgewählte Kategorie aus dem Kombinationsfeld legt die DynamicPropertiesCategory:
( SelectedItem = "{Binding DynamicPropertiesCategory}" )
Klicken Sie hier, um mehr über die Beschriftungen für dynamische Eigenschaften zu erfahren.