Proprietà dinamiche

Proprietà dinamiche consentono di visualizzare e modificare le proprietà che vengono assegnate ad una categoria di Vault senza la necessità di modificare il file XAML.

Durante l'aggiunta di una nuova proprietà ad una categoria del Vault, queste proprietà vengono visualizzate automaticamente la volta successiva della finestra di dialogo Data Standard o la scheda viene visualizzato.

Utilizzare le proprietà dinamiche nelle finestre di dialogo di Data Standard e le schede

Le proprietà dinamiche sono rappresentati da un file XAML DataGrid controllo che presenta due colonne. La prima colonna è di sola lettura e visualizza il nome della proprietà. La seconda colonna è più complessa poiché deve visualizzare diversi controlli per tipi diversi (ad esempio, ComboBox per le proprietà con un elenco predefinito di valori, DataPicker per le proprietà di tipo data).

DataGrid controllo

Per aggiungere la proprietà di controllo dinamico per i seguenti sono necessarie linee:

...
                <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 seconda colonna utilizza uno stile di cella (cellstyle="{staticresourcedynamicdatagridcellstyle}) che deve essere aggiunto al file .xaml nella sezione Risorse. Questo si occupa di tutti i diversi tipi di controlli:

...
  <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 unione DynamicProperties

Osservare la riga di codice nell'esempio precedente:

ItemsSource="{Binding DynamicProperties}"

Questo codice indica un elenco di IProperty gli elementi che vengono assegnati alla categoria. IProperty oggetto, tra gli altri, i membri che può essere utilizzato in Binding:

Nota: In Data Standard per Vault, DynamicProperties restituisce tutte le proprietà assegnate ad una categoria. Mentre per CAD, solo le proprietà mappate vengono restituiti. Questo perché i dati CAD standard per non modificare direttamente le proprietà del Vault. Le modifiche vengono eseguite attraverso la mappatura del Vault.

XAML unione DynamicPropertiesCategory

In modo che il DynamicProperties unione restituisce un elemento, una categoria del Vault deve essere specificato. nell'implementazione di default fornito con Data Standard, DynamicPropertiesCategory viene specificata mediante una casella combinata:

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

L'elenco delle categorie del Vault disponibili (ItemsSource="{Binding PsList[GetCategories]}") viene restituito da una funzione PowerShell GetCategories. nell'implementazione di default, questo restituisce tutte le categorie. Se solo determinate categorie devono essere disponibili (ad esempio, in base al tipo di documento), questa funzione è stata modificata.

La categoria selezionata nella casella combinata imposta il DynamicPropertiesCategory:

(selecteditem="{binding-dynamicpropertiescategory}")

Fare clic qui per ulteriori informazioni sulle etichette di proprietà dinamiche.