Propiedades dinámicas permiten mostrar y editar propiedades que están asignados a una categoría de Vault sin tener que modificar el archivo XAML.
Al añadir nuevas propiedades a una categoría de almacén, estas propiedades aparecen automáticamente la próxima vez que el cuadro de diálogo Estándar de datos o la ficha se muestra.
Las propiedades dinámicas se representan mediante un control de XAML de la rejilla de datos que tiene dos columnas. La primera columna es de sólo lectura y muestra el nombre de la propiedad. La segunda columna es más compleja porque tiene para mostrar diferentes controles para tipos diferentes (por ejemplo, ComboBox Para propiedades con una lista predefinida de valores, DataPicker para propiedades de tipo fecha).
Control de la rejilla de datos
Para añadir las propiedades dinámicas controlan al cuadro de diálogo, las siguientes líneas se necesario:
... <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 segunda columna utiliza un estilo ( cellStyle = " {StaticResourceDynamicDataGridCellStyle} ) que también se debe añadir en el archivo XAML en la sección de recursos. Este se encarga de los diferentes controles:
... <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 enlazando DynamicProperties
Buscar en esta línea de código en el ejemplo anterior:
ItemsSource = " {Binding DynamicProperties} "
Este código obtiene una lista de iProperty elementos que se asigna a la categoría. iProperties objeto, entre otros, estos elementos, que se pueden utilizar en enlaces:
XAML enlazando DynamicPropertiesCategory
Para que la DynamicProperties enlazando vuelve algo, una categoría de almacén se debe especificar primero. En la implementación por defecto que se suministra con Estándar de datos, el DynamicPropertiesCategory se especifica a través de un cuadro combinado:
... <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> ...
La lista de categorías de Vault ( ItemsSource = "{Binding PsList [GetCategories] }" ) se ha devuelto por una función de PowerShell GetCategories. En el valor por defecto de implementación, esta solo devuelve todas las categorías. Si sólo determinadas categorías deberían estar disponibles (p. ej., en función del tipo de documento), esta función se va a ajustar.
La categoría seleccionada en el cuadro combinado establece el DynamicPropertiesCategory:
( SelectedItem = "{Binding DynamicPropertiesCategory}" )
Haga clic aquí para obtener más información acerca de las etiquetas de propiedad dinámica.