数据绑定与分层数据模板和树视图

时间:2013-02-14 12:53:26

标签: 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(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窗口中,我有一个Treeview,我使用分层数据模板来处理数据,它显示产品,按部门排序。以下是我使用的资源:

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

在窗口的XAML文件中,我将树视图调出:

<TreeView Name="lstProducts" ItemsSource="{Binding tbl_Departments}" ItemTemplate="{StaticResource treeViewTemplate}" AlternationCount="2" SelectedValuePath="ID"/>

在窗口的.cs文件中,我定义了以下方法:

Public void UpdateUI() {
    DataSet outResult;
    If (ProductsDatabase.TryToGetProductsDataset(out outResult)) {
        this.tvwProducts.DataContext = outResult;
    }
}

每当对产品进行更改时,或者每当运行InitializeComponent方法时,都会调用UpdateUI方法。所以,现在这一切都显示出来了,这是我的实际问题。我在窗口上有一些文本框,当我选择一个产品时,我希望文本框中填充所选产品的数据。我要么忽略所选择的任何部门,要么完全阻止实际选择部门,无论哪种方式都有效。我将尝试其他几件事,我也会焦急地等待来自这里的任何答案。

感谢您的时间,感谢您给出的任何答案。

1 个答案:

答案 0 :(得分:0)

所以,我对此采取了不同的方向。

树视图获取它自己的DataSet作为它的数据上下文。然后,我使用相同的数据模板和分层数据模板来显示信息。然后,在后面的代码中,我确保在调用TreeView的SelectedValueChanged事件时,检查所选DataRowView的DataRow是否来自正确的表。如果是,那么我从数据库中提取产品信息并在运行时将其放入控件的数据上下文中。