WPF のデータ バインディングを使用して、オブジェクト ソースからのデータを ListBox に入力しようとしています。
ソースは、データが xml ファイルから読み込まれる ObjectDataProvider です。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 には何も表示されません。
どんな助けでも大歓迎です。