Динамические свойства позволяют отображать и редактировать свойства, которые назначены категории Vault без необходимости изменять файл XAML.
При добавлении новых свойств в категории Vault, эти свойства отображаются автоматически при следующем диалогового окна Data Standard или ", как показано на рисунке.
Динамические свойства представлены по ключевому слову "XAML" DataGrid с двумя колоннами. Первый столбец предназначен только для чтения и отображает имя свойства. Второй столбец является более сложным, так как он имеет для отображения различных элементов управления для различных типов (например, " поле со списком " для свойства с предварительно определенного списка значений, DataPicker для свойств типа "дата").
DataGrid управления
Для добавления динамических свойств в диалоговом окне отображаются следующие строки:
... <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> ...
Второй столбец используется стиль ( ячеек = " {StaticResourceDynamicDataGridCellStyle} ), который также необходимо добавить в файл XAML в разделе " Ресурсы ". Это обеспечивает все элементы управления:
... <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 привязка DynamicProperties
Рассмотрим следующий код в предыдущем примере:
ItemsSource = " {Binding DynamicProperties }
Этот код Получение списка Свойства Inventor элементы, назначенные категории. Свойства Inventor объект имеет, эти элементы, которые можно использовать для привязки:
XAML привязка DynamicPropertiesCategory
В порядке, DynamicProperties привязка возвращается что-то, категории Vault должен быть указан первым. По умолчанию в реализации, поставляемый с Data Standard DynamicPropertiesCategory Получение задаются с помощью поля со списком:
... <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> ...
Список доступных категорий хранилища ( ItemsSource = "{Binding PsList [GetCategories] }" ), возвращаемой функцией PowerShell GetCategories. По умолчанию в внедрения, это просто возвращает все категории. Если только определенных категорий должен быть доступен (например, на основе типа документа), эта функция должна быть скорректированы.
Выбранной категории в поле со списком задание DynamicPropertiesCategory:
( SelectedItem = "{Binding DynamicPropertiesCategory}" )
Щелкните здесь для получения дополнительных сведений о метках динамических свойств.