Я пытаюсь использовать декларативное связывание для привязки объекта каркаса сущности к древовидной структуре. Таблица SQL, на которой основан объект, является иерархической таблицей SQL. Вот схема:
CREATE TABLE [dbo].[lkpSource](
[OrgNode] [hierarchyid] NOT NULL,
[OrgLevel] AS ([OrgNode].[GetLevel]()),
[ID] [uniqueidentifier] NOT NULL,
[Title] [nvarchar](50) NOT NULL,
[HierarchyString] AS ([OrgNode].ToString()) PERSISTED,
CONSTRAINT [PK__lkpSourc__C1ECAF2A53908500]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[lkpSource] ADD DEFAULT (newid()) FOR [ID]
GO
Строковое поле является одним из многих методов, которые я пытался привязать к работе, в коде, который я также добавил [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
поверх объявления свойства.
У меня есть источник данных в окне XAML. Ресурсы:
<CollectionViewSource x:Key="sourceViewSource"
d:DesignSource="{d:DesignInstance {x:Type
local:lkpSource}, CreateList=True}"/>
Подобные источники данных успешно привязываются к сеткам данных в приложении, поэтому у меня, похоже, мой контекст и все настроено правильно.
Я потратил около 12 часов, пробуя различные вещи, которые я нашел в Интернете, которые не совсем применимы - либо они не использовали структуру сущностей, либо они не использовали иерархические данные, либо они не были WPF - ничего не получалось или даже близко не подошло.
Можно ли связать это декларативно? Если да, может кто-нибудь опубликовать краткий пример XAML в виде дерева? Единственный столбец, который мне нужен, это заголовок. Если невозможно связать декларативно, может кто-нибудь указать мне учебник, который включает в себя все вовлеченные факторы, включая иерархические данные, структуру сущностей и WPF? Спасибо.
Visual Studio 2017, цель 4.7.1
SQL Server 2017
Entity Framework 6.2
Обновление: это свойство добавлено в lkpSource.cs проекта, если оно помогает:
public SqlHierarchyId? OrgNode
{
get
{
return SqlHierarchyId.Parse(HierarchyString);
}
set
{
OrgNode = value;
}
}