прежде всего извините за заголовок. Я знаю, что это не так ясно, но я не могу думать ни о чем другом. Если кто-то хочет, чтобы я изменил его, дайте свои предложения, пожалуйста (и обратите внимание, что снижение голосов здесь не является правильным решением)
Теперь моя проблема.
У меня есть XML, который выглядит так:
<scenarios-list>
<scenario name="Fuori casa" value="fuori-casa">
<lights>
<lights-group name="soggiorno">
<lights-item name="portone" outputChannelName="Luci|Appartamento|Portone|DO_Stato" inputChannelName="Luci|Appartamento|Portone|DI_On_Off">off</lights-item>
<lights-item name="soggiorno-principale" outputChannelName="Luci|Appartamento|Soggiorno_Principale|DO_Stato" inputChannelName="Luci|Appartamento|Soggiorno_Principale|DI_On_Off">off</lights-item>
<lights-item name="soggiorno-secondario" outputChannelName="Luci|Appartamento|Soggiorno_Secondario|DO_Stato" inputChannelName="Luci|Appartamento|Soggiorno_Secondario|DI_On_Off">off</lights-item>
<lights-item name="parete-zona-cucina" outputChannelName="Luci|Appartamento|Parete_Zona_Cucina|DO_Stato" inputChannelName="Luci|Appartamento|Parete_Zona_Cucina|DI_On_Off">off</lights-item>
<lights-item name="finestra-soggiorno" outputChannelName="Luci|Appartamento|Finestra_Soggiorno|DO_Stato" inputChannelName="Luci|Appartamento|Finestra_Soggiorno|DI_On_Off">off</lights-item>
</lights-group>
... (lots of <lights-group> here)
</lights>
... (lots of <lights> here)
</scenario>
...(lots of <scenario> here)
</scenarios-list>
У меня есть usercontrol, в котором пользователь может видеть и редактировать следующие сценарии:
<Grid Name="BaseGrid">
<Grid.Resources>
<XmlDataProvider **x:Name="ScenesXmlName"** x:Key="ScenesXml" XPath="scenari-list/scenario" Source="C:\Users\andrea\RSSReaderSubscriptions-5.xml"/>
</Grid.Resources>
<ComboBox Name="ScenariCombo"
**ItemsSource="{Binding Source={StaticResource ScenesXml}}" DisplayMemberPath="@name"**/>
<StackPanel>
<ListBox Name="LightsList" **ItemsSource="{Binding Source={StaticResource ScenesXml}, XPath=lights/lights-group}**">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Name="LightsExpander" **Header="{Binding XPath=@name}"** >
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label **Content="{Binding XPath=ligths-item@name}"** />
<CheckBox />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</StackPanel>
</Grid>
Итак, я хочу:
- загрузите
<scenarios-list>
в выпадающий список (отображая только
имя сценария) [Мой код уже делает это]
- загрузить список
<lights-group>
в список на основе выбранного элемента комбинированного списка (отображать только имя группы источников света) [Мой код уже делает это, даже если я получаю эту ошибку:
System.Windows.Data Ошибка: 43: BindingExpression с XPath не может связываться с не-XML объектом; XPath = 'lights / lights-group' BindingExpression: Path =; DataItem = 'XmlDataCollection' (HashCode = 56809051); целевым элементом является ListBox (Name = 'LightsList'); Свойство target - «ItemsSource» (тип «IEnumerable»). XmlDataCollection: «MS.Internal.Data.XmlDataCollection»
- внутри каждого Расширителя загружают все
<lights-item>
, которые входят в <lights-group>
[У меня нет ни малейшего представления о том, как это сделать]
Можете ли вы помочь мне, пожалуйста?