Dinamikus tulajdonságok lehetővé teszik, hogy megjelenítse és szerkessze a tulajdonságokat, melyek egy Vault kategóriát anélkül módosíthatja az .xaml fájlt.
Ha új Tulajdonságok hozzáadása egy Vault kategóriát, ezek a tulajdonságok automatikusan megjelennek a Data Standard párbeszédpanel vagy lap jelenik meg.
A dinamikus tulajdonságokat egy XAML DataGrid
vezérlő jelzi, amely két oszlopot tartalmaz. Az első oszlop írásvédett, és megjeleníti a tulajdonság nevét. A második oszlop összetettebb, mert a különböző típusokhoz más-más vezérlőket kell megjelenítenie (pl.: ComboBox az előre megadott értéklistával rendelkező tulajdonságokhoz, DataPicker a dátum típusú tulajdonságokhoz).
A dinamikus tulajdonságai vezérlik a párbeszédpanelt, akkor a következő sorok kerülnek szükséges:
...
<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 második oszlop (cellstyle="{staticresourcedynamicdatagridcellstyle})
stílust használ, amelyet szintén hozzá kell adni az XAML-fájlhoz a Források szakaszban. Ez a gondoskodik a különböző vezérli:
...
<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>
...
DynamicProperties
XAML-csatolásTekintse meg ezt a sor az előző példában:
ItemsSource="{Binding DynamicProperties}"
Ez a kód a kategóriához rendelt IProperty
elemek listáját adja vissza. Az IProperty
objektum többek között a következő tagokat tartalmazza, amelyek csatolásokban használhatók:
ListValues
– előre megadott értéklistával rendelkező tulajdonságokhoz.Name
– a tulajdonság neve. Az érték az első oszlopban.Value
– a tulajdonságérték lekéréséhez és beállításához.DynamicProperties
visszaadja az összes olyan tulajdonságot, amely kategóriához van rendelve. Míg a CAD, csak a leképezett tulajdonságok jelennek meg. Ez azért van, mert az Adatszabvány CAD nem közvetlenül módosíthatja a Vault tár tulajdonságai. A változtatások a Vault leképezés.DynamicPropertiesCategory
XAML-csatolásAhhoz, hogy a DynamicProperties
csatolás visszaadjon valamit, először meg kell adni egy Vault-kategóriát. A Data Standard alapértelmezett implementációjában a DynamicPropertiesCategory
megadása kombinált mezőben történik:
...
<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>
...
Az elérhető Vault-kategóriák listáját ((ItemsSource="{Binding PsList[GetCategories]}")
) egy GetCategories
PowerShell-függvény adja vissza. Az alapértelmezett telepítés, ez csak az összes kategóriát. Ha csak bizonyos kategóriákat érhető el (például a dokumentum típusa), ez a funkció rendelkezik.
A kiválasztott kategóriát a beviteli listája a DynamicPropertiesCategory:
(selecteditem="{binding-dynamicpropertiescategory}")
Ide kattintva többet tudhat meg a dinamikus tulajdonságok címkéiről.