Dynamické vlastnosti

Dynamické vlastnosti umožňují zobrazit a upravit vlastnosti, které jsou přiřazeny do kategorie úložiště, aniž by bylo nutné upravit soubor XAML.

Při přidání nové vlastnosti do kategorie úložiště, tyto vlastnosti se zobrazí automaticky při další dialog Data Standard nebo karta je na obrázku.

Pomocí dynamické vlastnosti v dialogu Data Standard dialogy a karty

Dynamické vlastnosti jsou reprezentovány ovládacím prvkem XAMLDataGrid, který má dva sloupce. První sloupec je pouze pro čtení a zobrazuje název vlastnosti. Druhý sloupec je složitější, protože má pro zobrazení různých ovládací prvky pro různé typy (například ComboBox pro vlastnosti s předdefinovaným seznamem hodnot, DataPicker pro vlastnosti typu datum).

třídy DataGrid řízení

Chcete-li přidat dynamické vlastnosti řídí do dialogu, jsou zapotřebí následující řádky:

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

Ve druhém sloupci je použit styl (cellstyle="{staticresourcedynamicdatagridcellstyle}), který je také nutné přidat do souboru XAML v části Resources. Toto se postará všechny ovládací prvky:

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

Vázání XAML a prvku DynamicProperties

Podívejte se na tento řádek kódu v předchozím příkladu:

ItemsSource="{Binding DynamicProperties}"

Tento kód získá seznam prvků IProperty, které jsou přiřazeny do kategorie. Objekt IProperty má mimo jiné tyto prvky, které lze použít ve vazbách:

Poznámka: V dialogu Data Standard pro aplikaci Vault, vrátí prvek DynamicProperties všechny vlastnosti přiřazené do kategorie. Zatímco pro CAD, jsou vráceny pouze mapované vlastnosti. Je tomu tak proto, že Data Standard pro aplikace CAD nelze přímo změnit vlastnosti úložiště. Změny jsou prováděny prostřednictvím mapování úložiště.

Vázání XAML a prvku DynamicPropertiesCategory

Aby vazba DynamicProperties něco vrátila, je nutné nejprve určit kategorii úložiště. Ve výchozí implementaci, která je součástí nástroje Data Standard, je položka DynamicPropertiesCategory určena pomocí rozevíracího seznamu:

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

Seznam dostupných kategorií úložiště (ItemsSource="{Binding PsList[GetCategories]}") je vrácen funkcí prostředí PowerShell GetCategories. V dialogu Výchozí implementace, tato pouze vrátí všechny kategorie. Pokud pouze určité kategorie by měly být k dispozici (například na základě typu dokumentu), tato funkce má být upravena.

Vybranou kategorii z rozevíracího seznamu nastaví DynamicPropertiesCategory:

(selecteditem="{binding-dynamicpropertiescategory}")

Kliknutím zde získáte další informace o popiscích dynamických vlastností.