Propiedades dinámicas

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.

Utilice propiedades dinámicas en cuadros de diálogo y fichas de Data Standard

Las propiedades dinámicas se representan mediante un control de XAML de DataGrid que tiene dos columnas. La primera columna es de solo 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 al archivo XAML en la sección 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>
...

Enlace de XAML DynamicProperties

Buscar en esta línea de código en el ejemplo anterior:

ItemsSource="{Binding DynamicProperties}"

Este código obtiene una lista de elementos IProperty que se asigna a la categoría. El objeto IProperty tiene, entre otros, estos elementos, que se pueden utilizar en enlaces:

Nota: En Data Standard para Vault, DynamicProperties devuelve todas las propiedades asignadas a una categoría. Mientras que en CAD, solo las propiedades asignadas. Esto se debe a que el Estándar de datos para archivos CAD no modificar directamente las propiedades de Vault. Los cambios se realizan a través de asignación de almacén.

Enlace de XAML DynamicPropertiesCategory

Para que el enlace de DynamicProperties devuelva algo, se debe especificar antes una categoría de Vault. En la implementación por defecto que se suministra con Data Standard, 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 disponibles (ItemsSource="{Binding PsList[GetCategories]}") la devuelve 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.