WPF에서 데이터 바인딩을 사용하여 개체 소스의 데이터로 ListBox를 채우려고합니다.ListBox에 계층 적 개체 데이터 바인딩
소스는 xml 파일에서 데이터가로드되는 ObjectDataProvider입니다. XML 파일을 읽고 적절한 데이터 구조를 채운 다음 ObjectDataProvider의 ObjectInstance를 데이터 구조로 설정합니다. 여기
데이터 구조이다Public 클래스 소자 { 공개 진수 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;
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;
}
원하는 결과이다 : 여기
<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 데이터가로드된다 :
public BasicSet[] df_basicSet { get { return basicSet; } set { this.basicSet = value; } }
} 여기
는 XAML이고 ListBox에는 데이터 구조의 각 요소에 대한 TextBox가 있습니다. 이유는 데이터 구조가 계층 적이라는 점입니다. 나는 문제를 단순화하기 위해 데이터 구조를 평평하게 할 수 없다.
XML 데이터가 데이터 구조에 올바르게로드되는 것은 확실합니다. 중단 점을 배치하고 체크하고 모든 데이터가 잘 보일 수 있기 때문입니다. 그러나 프로그램을 실행하면 ListBox에 아무 것도 나타나지 않습니다.
도움을 주시면 감사하겠습니다.
, 감사 : 여기
그리고
올바른 XAML입니다. –