繁体   English   中英

C#TreeView并绑定到数据库

[英]C# TreeView and binding to a database

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

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>  

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

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

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字段并将其放在“批处理数据”标题下的TreeView中。 一旦我弄清楚了这一点,我希望能够从TreeView中选择的项目中获取VarId和EventId值,因为我将使用这些值来填充数据网格。

首先, 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>

更新>>>

如我所说, TreeView显示分层数据。 这意味着您的数据必须具有公共集合属性才能用于子节点 因此,创建一个名为Data ,具有一个用于保存Batch Data文本的属性,例如,名为Name ,以及一个ObservableCollection<string>属性,例如,将其命名为Items来保存VarDesc列值。

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

<TreeView ItemsSource="{Binding DataItems}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type YourXamlNamespacePrefix.Data}" 
            ItemsSource="{Binding Items}">
            <TextBlock Text="{Binding Name}" /> <!-- Parent DataTemplate -->
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate> <!-- Child DataTemplate -->
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM