Я пытаюсь заполнить ListBox данными из источника объекта, используя привязку данных в WPF.
Источником является ObjectDataProvider, данные которого загружаются из файла XML. Я прочитал в файле XML, заполнив соответствующую структуру данных, а затем установил ObjectInstance для ObjectDataProvider в структуру данных.
Вот структура данных:
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 ничего не появляется.
Любая помощь приветствуется.