powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / XPath предыдущее значение в ветке
8 сообщений из 8, страница 1 из 1
XPath предыдущее значение в ветке
    #39059992
TD6370
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном коде происходит прохождение по всем веткам одного списка. Нужно при обращении к очередному значению в ветке взять значение из предыдущей строки. В данном случае, если в TextBlock с Name="T1" будет значение "3", то в TextBlock с TextBlock c Name="T2" нужно вернуть предыдущее значение "2". Заранее благодарен.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Page.Resources>
        <XmlDataProvider x:Key="DataL">
            <x:XData>
                <Art>
                    <Title>A</Title>
                    <Bars>
                        <Left V="1" />
                        <Left Val="2" />
                        <Left Val="3" />
                    </Bars>
                    <Title>B</Title>
                    <Bars>
                        <Left V="4" />
                        <Left Val="5" />
                        <Left Val="6" />
                    </Bars>
                </Art>
            </x:XData>
        </XmlDataProvider>
        <DataTemplate x:Key="DT">
                <ListBox 
                        ItemsSource="{Binding XPath=Nums/Sample}" 
                        >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                                <TextBlock Name="T1" Text="{Binding XPath=@Val}" />
                                <TextBlock Name="T2" Text="{Binding XPath=@Val}" />
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
        </DataTemplate>
    </Page.Resources>
    <Grid>
        <StackPanel>
            <ListBox
               ItemsSource="{Binding Source={StaticResource DataL}, XPath=Art}"
               ItemTemplate="{StaticResource DT}"/>
        </StackPanel>
    </Grid>
</Page>
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060006
TD6370
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
        <Page.Resources>
            <XmlDataProvider x:Key="DataL">
                <x:XData>
                    <Art>


Опечатка, должно быть:
Код: sql
1.
       <XmlDataProvider x:Key="DT">
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060011
TD6370
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще поправка:
Код: sql
1.
2.
3.
4.
5.
<DataTemplate x:Key="DT">
                <ListBox 
                        ItemsSource="{Binding XPath=Nums/Sample}" 
                        >
                    <ListBox.ItemTemplate>


правильно:
Код: sql
1.
2.
3.
4.
5.
<DataTemplate x:Key="DT">
                <ListBox 
                        ItemsSource="{Binding XPath=Bars/Left}" 
                        >
                    <ListBox.ItemTemplate>
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060126
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RelativeSource.PreviousData не работает в XPath?
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060490
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TD6370Еще поправка:
правильно:
Код: sql
1.
2.
3.
4.
5.
<DataTemplate x:Key="DT">
                <ListBox 
                        ItemsSource="{Binding XPath=Bars/Left}" 
                        >
                    <ListBox.ItemTemplate>


TD6370Еще поправка:
правильно:
Код: sql
1.
2.
3.
4.
5.
<DataTemplate x:Key="DT">
                <ListBox 
                        ItemsSource="{Binding XPath=Bars/Left}" 
                        >
                    <ListBox.ItemTemplate>


И у вас будет 2 ресурса с одним ключом? не взлетит, компилятор выдаст ошибку.
Далее, для корневого тэга внутри x:XData документация требует задания пустого неймспейса:
The root node of the XML data has an xmlns attribute that sets the XML namespace to an empty string. This is a requirement for applying XPath queries to a data island that is inline within the XAML page. In this inline case, the XAML, and thus the data island, inherits the System.Windows namespace. Because of this, you need to set the namespace blank to keep XPath queries from being qualified by the System.Windows namespace, which would misdirect the queries.
https://msdn.microsoft.com/en-us/library/system.windows.data.xmldataprovider(v=vs.100).aspx
В разметке вообще что-то странное - ListBox, у которого ItemTemplate - еще один ListBox, у которого, кстати, ItemTemplate написан неправильно - там два одноуровневых элемента (TextBlock) в VisualTree, чего компилятор тоже не пропустит, эти TextBlock'и должны быть завернуты в StackPanel (например).
Примерно вот так будет работать (у меня это работает в обычно окошке - это так, просто для демонстрации):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<Window.Resources>
  <XmlDataProvider x:Key="DataL">
    <x:XData>
      <Art xmlns="">
        <Title>A</Title>
        <Bars>
          <Left V="1" />
          <Left Val="2" />
          <Left Val="3" />
        </Bars>
        <Title>B</Title>
        <Bars>
          <Left V="4" />
          <Left Val="5" />
          <Left Val="6" />
        </Bars>
      </Art>
    </x:XData>
  </XmlDataProvider>
</Window.Resources>
<Grid>
  <StackPanel>
    <ListBox
      ItemsSource="{Binding Source={StaticResource DataL}, XPath=/Art/Bars/Left}">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <TextBlock Name="T1" Text="{Binding XPath=@Val}" />
            <TextBlock Name="T2" Text="{Binding XPath=preceding-sibling::*[1]/@Val}" Margin="10,0"/>
          </StackPanel>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
  </StackPanel>
</Grid>
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060499
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я один не пользуюсь XPath и оборачиваю такое в классы, так как XML для меня это слой данных и мне как то стрёмно его связывать напрямую с XML?
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060542
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesя один не пользуюсь XPath и оборачиваю такое в классы, так как XML для меня это слой данных и мне как то стрёмно его связывать напрямую с XML?
Иногда (очень иногда) бывают случаи, когда модель для вьюмодели 1) read-only; 2) автогенерируемая. Пример - данные непосредственно из БД (MSSQL) через for xml. Тогда XmlDataProvider вполне удобен. Я именно в таких случаях (пару-тройку раз) к нему и прибегал.
...
Рейтинг: 0 / 0
XPath предыдущее значение в ветке
    #39060847
TD6370
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Код: sql
1.
TextBlock'и должны быть завернуты в StackPanel (например).


Это верно, на коленке писал, забыл вставить контейнер.
А на счет ListBox в ListBox - так задумано.
Спасибо за:
Код: sql
1.
RelativeSource.PreviousData

и
Код: sql
1.
Text="{Binding XPath=preceding-sibling::*[1]/@Val}"


буду пробовать.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / XPath предыдущее значение в ветке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]