Dynamische Eigenschaften

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.

Verwenden der dynamischen Eigenschaften in Data Standard Dialogfelder und Registerkarten

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).

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}), 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>
...

XAML-Bindung 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:

Anmerkung: In Data Standard für Vault gibt DynamicProperties 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.

XAML-Bindung 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.