我正在尝试使用 WPF 中的数据绑定使用来自对象源的数据填充 ListBox。
源是一个 ObjectDataProvider,其数据是从 xml 文件中加载的。我读入 XML 文件,填写适当的数据结构,然后将 ObjectDataProvider 的 ObjectInstance 设置为数据结构。
下面是数据结构:
public class Element
{
public decimal myValue;
public decimal df_myValue { get { return myValue; } set { this.myValue = value; } }
}
public class BasicSet
{
public Element[] elementSet;
public Element[] df_elementSet { get { return elementSet; } set { this.elementSet = value; } }
}
public class DataSet
{
public 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 中什么也没有显示。
任何帮助表示赞赏。