我通过存储过程查询数据库并获取数据。我正在填充这样一个对象:
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值,因为我将使用它们来填充数据网格。
答案 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