C# 使用分层数据模板和树视图进行数据绑定

C# 使用分层数据模板和树视图进行数据绑定,c#,wpf,data-binding,treeview,C#,Wpf,Data Binding,Treeview,我正在使用Microsoft Access和WPF开发一个ERP类型的系统。我有一些关于如何将信息绑定到一些文本框和树视图选择的问题。因此,在我提问之前,让我先介绍一下我已经做过的工作的背景 我的数据库中有以下表格: Table: tbl_Vendors Column: ID - Autonumber Column: Name - string(75) Table: tbl_Departments Column: ID - Autonumber Column: Name - string(10

我正在使用Microsoft Access和WPF开发一个ERP类型的系统。我有一些关于如何将信息绑定到一些文本框和树视图选择的问题。因此,在我提问之前,让我先介绍一下我已经做过的工作的背景

我的数据库中有以下表格:

Table: tbl_Vendors
Column: ID - Autonumber
Column: Name - string(75)

Table: tbl_Departments
Column: ID - Autonumber
Column: Name - string(100)

Table: tbl_Products
Column: ID - Autonumber
Column: Department - Number (linked to tbl_Departments.ID)
Column: Description - string(255)
Column: UPC - string(12)
Column: Price - currency

Table: tbl_Product_Vendor_Cost
Column: VendorID - number (linked to tbl_Vendors.ID)
Column: ProductID - number (linked to tbl_Products.ID)
Column: Cost - Currency
在我的XAML窗口中,我有一个树状视图,我使用一个层次数据模板来处理数据,它显示按部门排序的产品。以下是我使用的资源:

    <Window.Resources>
        <!-- The data template for the products-->
        <DataTemplate x:Key="productTemplate">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>

        <!-- The data template for the departments-->
        <HierarchicalDataTemplate x:Key="treeViewTemplate" ItemsSource="{Binding Department2Product}" ItemTemplate="{StaticResource productTemplate}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
每当对产品进行更改时,或者每当同时运行InitializeComponent方法时,都会调用UpdateUI方法。所以,现在所有这些都显示出来了,这是我的实际问题。我在窗口上有一些文本框,当我选择一个产品时,我希望文本框中填入所选产品的数据。我要么忽略任何被选中的部门,要么阻止所有部门的实际选择,无论哪种方式都有效。我将尝试一些其他的事情,同时我也在焦急地等待这里的任何答案


谢谢你的时间,我很感谢你能给我的任何答案。

所以,我选择了另一个方向

treeview获取自己的数据集作为数据上下文。然后,我使用相同的数据模板和层次数据模板来显示信息。然后,在代码隐藏中,我只是确保在调用TreeView的SelectedValueChanged事件时,检查SelectedDataRowView的DataRow是否来自正确的表。如果是,那么我从数据库中提取产品信息,并在运行时将其放入控件的数据上下文中

<TreeView Name="lstProducts" ItemsSource="{Binding tbl_Departments}" ItemTemplate="{StaticResource treeViewTemplate}" AlternationCount="2" SelectedValuePath="ID"/>
Public void UpdateUI() {
    DataSet outResult;
    If (ProductsDatabase.TryToGetProductsDataset(out outResult)) {
        this.tvwProducts.DataContext = outResult;
    }
}