我想用WPF中使用数据绑定的对象源的数据填充ListBox。将分层对象数据绑定到列表框
源是一个ObjectDataProvider,其数据从xml文件中加载。我读入XML文件,填入适当的数据结构,然后将ObjectDataProvider的ObjectInstance设置为数据结构。
这里是数据结构:
公共类元素 { 公共小数myvalue的;
public decimal df_myValue { get { return myValue; } set { this.myValue = value; } }
}
公共类BasicSet { 公共元素[] ELEMENTSET;
public Element[] df_elementSet { get { return elementSet; } set { this.elementSet = value; } }
}
公共类数据集 { 公共BasicSet [] basicSet;
public BasicSet[] df_basicSet { get { return basicSet; } set { this.basicSet = value; } }
}
这里是XAML:
<UserControl.Resources>
<ResourceDictionary>
<ObjectDataProvider x:Key="TheData" />
<DataTemplate x:Key="ElementTemplate">
<StackPanel>
<TextBox Text="{Binding, Path=df_myValue}" />
</StackPanel>
</DataTemplate>
<HierarchicalDataTemplate x:Key="ElementSetTemplate" ItemsSource="{Binding Path=df_elementSet}" ItemTemplate="{StaticResource ElementTemplate}">
</HierarchicalDataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<ListBox ItemsSource="{StaticResource TheData}" ItemTemplate="{StaticResource ElementSetTemplate}">
</ListBox>
</Grid>
这里是代码隐藏在正在加载的XML数据:
private DataSet m_dataSet;
private ObjectDataProvider mODP;
public void LoadXml(EditorContext context, XmlValidator.Context validator, XmlDocument doc)
{
mODP = FindResource("TheData") as ObjectDataProvider;
XmlSerializer xs = new XmlSerializer(typeof(DataSet));
XmlReader r = new XmlNodeReader(doc.DocumentElement);
m_dataSet = (DataSet)xs.Deserialize(r);
mODP.ObjectInstance = m_dataSet;
}
期望的结果是该ListBox将为数据结构中的每个元素都有一个TextBox。请注意,由于某种原因,数据结构是分层的。我无法将数据结构扁平化以简化问题。
我确定xml数据正在正确加载到数据结构中,因为我可以放置一个断点并检查它,并且所有数据看起来都很好。但是当我运行程序时,ListBox中什么也没有显示出来。
任何帮助表示赞赏。
正是我一直在寻找,感谢随访。 – 2013-05-16 16:15:29