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.
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ù complesso poiché è per visualizzare diversi controlli per tipi diversi (ad esempio, casella combinata 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 (= " {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:
valore 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:
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 disponibili Vault ( valore 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:
( riferimento a SelectedItem = "{Binding DynamicPropertiesCategory}" )
Fare clic qui per ulteriori informazioni sulle etichette di proprietà dinamiche.