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 sind in der XAML-Datei DataGrid
mit zwei Spalten enthalten. 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).
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})
, der ebenfalls im Ressourcenabschnitt zur XAML-Datei hinzugefügt werden muss. 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>
...
DynamicProperties
Betrachten Sie diese Code-Zeile im vorherigen Beispiel:
ItemsSource="{Binding DynamicProperties}"
Dieser Code ruft eine Liste mit IProperty
-Elementen ab, die der Kategorie zugeordnet sind. Das IProperty
-Objekt enthält u. a. folgende Mitglieder, die in Bindungen verwendet werden können:
ListValues
für Eigenschaften mit einer vordefinierten WertelisteName
: Name der Eigenschaft. Der Wert für die erste Spalte.Value
zum Abrufen und Festlegen des EigenschaftswertsDynamicProperties
alle einer Kategorie zugewiesenen Eigenschaften zurück. Während für CAD, nur die zugeordneten Eigenschaften zurückgegeben werden. Dies liegt daran, dass Sie Data Standard für Vault nicht direkt ändern. Änderungen werden über Vault zuordnen.DynamicPropertiesCategory
Damit die Bindung DynamicProperties
Werte zurückgibt, muss zuerst eine Vault-Kategorie angegeben werden. In der vorgegebenen Implementierung von Data Standard wird DynamicPropertiesCategory
durch ein Kombinationsfeld angegeben:
...
<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]}")
wird von einer PowerShell-Funktion GetCategories
zurückgegeben. 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}")
Weitere Informationen zu den Beschriftungen für dynamische Eigenschaften finden Sie hier.