C#TreeView并绑定到数据库

时间:2014-02-24 19:45:24

标签: c# wpf treeview

我通过存储过程查询数据库并获取数据。我正在填充这样一个对象:

private GetMiscVars _batchVariablesData;
        public GetMiscVars BatchVariablesData
        {
            get { return _batchVariablesData; }
            set
            {
                if (_batchVariablesData == value) return;
                _batchVariablesData = value;
                OnPropertyChanged("BatchVariablesData");
            }
        }  

在我的XAML中我有这个:

<TreeView>
    <TreeViewItem Header="Batch Data" ItemsSource="{Binding BatchVariablesData}">
            <TreeViewItem.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding VarDesc}" />
                </DataTemplate>
        </TreeViewItem.HeaderTemplate>
    </TreeViewItem>
</TreeView>  

当我的代码运行时,我看到的是我的父节点是空白而不是像我希望的那样说“批处理数据”,我的子节点返回在调用数据库时使用的ObservableCollection的名称,在此DgTabData中。
那么,我在哪里搞砸了? 谢谢

为了澄清一点,我有一个存储过程返回如下所示的数据:

VarId   EventId VarDesc
11      2489    WP1.WC01 Quantity
1196    2489    WP1.WC01 Brew Number
1197    2489    WP1.WC01 Operator Name
1216    2489    WP1.WC01 Integer Test
1217    2489    WP1.WC01 Logical Test
1218    2489    WP1.WC01 Float-4 Test
1219    2489    WP1.WC01 Float-3 Test  

我想将VarDesc字段放在BatchView标题下的TreeView中。一旦我能想到这一点,我希望能够从TreeView中选择的项中获取VarId和EventId值,因为我将使用它们来填充数据网格。

1 个答案:

答案 0 :(得分:2)

首先,TreeView显示分层数据。这意味着您的数据必须具有public集合属性才能用于子节点。接下来,要显示分层数据,您需要声明HierarchicalDataTemplate,而不是尝试按原样定义控件。请尝试使用此XAML:

<TreeView ItemsSource="{Binding CollectionOfParents}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type YourPrefix.YourClassName}" 
            ItemsSource="{Binding CollectionOfChildrenPropertyInParent}">
            <TextBlock Text="{Binding PropertyInParent}" /><!-- Parent DataTemplate -->
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate> <!-- Child DataTemplate -->
                    <TextBlock Text="{Binding PropertyInChild}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

更新&gt;&gt;&gt;

正如我所说, TreeView显示分层数据。这意味着您的数据必须具有用于子节点的公共集合属性。所以创建一个类,比如命名为Data,使用一个属性来保存Batch Data文本,比如名为Name和一个ObservableCollection<string>属性,让我们说名为{{ 1}}保存Items列值。

然后,您需要以您认为合适的任何方式使用从存储过程返回的项目填充集合。最后,创建一个VarDesc属性,假设在后面的代码或视图模型中命名为ObservableCollection<Data>,并添加您的DataItems类,以及集合项。然后你可以像这样绑定到Data

TreeView