Propriedades dinâmicas permitem mostrar e editar as propriedades que são atribuídos a uma categoria do Vault sem a necessidade de alterar o arquivo XAML.
Ao adicionar novas propriedades para uma categoria do Vault, estas propriedades aparecem automaticamente na próxima vez que a caixa de diálogo padrão de dados ou guia é exibida.
As propriedades dinâmicas são representados por um controle XAML DataGrid que tem duas colunas. A primeira coluna é de somente leitura e exibe o nome da propriedade. A segunda coluna é mais complexo porque ela tem controles para exibir diferentes para diferentes tipos (por exemplo, ComboBox para propriedades com uma lista predefinida de valores, DataPicker para propriedades de tipo Data).
Controle de DataGrid
Para adicionar as propriedades dinâmicas controlam a caixa de diálogo, as seguintes linhas são necessários:
... <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> ...
A segunda coluna utiliza um estilo de célula (= " {StaticResourceDynamicDataGridCellStyle} ) que também deve ser adicionada ao arquivo XAML na seção de recursos. Esta cuida de todos os 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> ...
Associação XAML DynamicProperties
Examinar esta linha de código do exemplo anterior:
ItemsSource = " {Binding DynamicProperties} "
Este código obtém uma lista de iProperty elementos que são atribuídas para a categoria. iProperties objeto tem, entre outros, estes membros que podem ser utilizados em vínculos:
Associação XAML DynamicPropertiesCategory
Em que o DynamicProperties vinculando retorna algo, uma categoria do Vault deve ser especificado. Na implementação padrão que vêm com o Data Standard, o DynamicPropertiesCategory Obtém especificada por meio de uma caixa de combinação:
... <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> ...
A lista de categorias disponíveis do Vault ( ItemsSource = "{Binding PsList [GetCategories] }" ) é retornado por uma função PowerShell GetCategories. Na implementação padrão, isto retorna todas as categorias. Se somente determinadas categorias devem estar disponíveis (por exemplo, com base no tipo de documento), esta função deve ser ajustado.
A categoria selecionada na caixa combo define o DynamicPropertiesCategory:
( SelectedItem = "{Binding DynamicPropertiesCategory}" )
Clique aqui para saber mais sobre as legendas de Propriedades dinâmicas.