Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataContent на XAML (WPF) / 25 сообщений из 39, страница 1 из 2
24.09.2018, 11:07
    #39706837
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Не знаю возможно ли такое. Если да - подскажите как.
Примеры упрощённые для обучения.
Есть словарь с двумя определёнными списками
Dictionary1.xaml
Код: 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.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:local="clr-namespace:DataContent_на_XAML___Wpf_">
 
    <col:ArrayList x:Key="ListMonths">
        <sys:String>Январь</sys:String>
        <sys:String>Февраль</sys:String>
        <sys:String>Март</sys:String>
        <sys:String>Апрель</sys:String>
        <sys:String>Май</sys:String>
        <sys:String>Июнь</sys:String>
        <sys:String>Июль</sys:String>
        <sys:String>Август</sys:String>
        <sys:String>Сентябрь</sys:String>
        <sys:String>Октябрь</sys:String>
        <sys:String>Ноябрь</sys:String>
        <sys:String>Декабрь</sys:String>
 
    </col:ArrayList>
    <col:ArrayList x:Key="ListDays">
        <sys:String>Понедельник</sys:String>
        <sys:String>Вторник</sys:String>
        <sys:String>Среда</sys:String>
        <sys:String>Четверг</sys:String>
        <sys:String>Пятница</sys:String>
        <sys:String>Суббота</sys:String>
        <sys:String>Воскресенье</sys:String>
    </col:ArrayList>
 
</ResourceDictionary>


Окно с двумя ListBox ссылающимися на эти списки
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<Window x:Class="DataContent_на_XAML___Wpf_.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DataContent_на_XAML___Wpf_"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox ItemsSource="{Binding Mode=OneWay, Source={StaticResource ListDays}}" HorizontalAlignment="Center" VerticalAlignment="Top"  Margin="10"/>
        <ListBox ItemsSource="{Binding Mode=OneWay, Source={StaticResource ListMonths}}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
    </Grid>
</Window>


Можно ли это всё как-то переопределить - чтобы в DataContext окна сослаться на общий источник,
а потом в ListBox ссылаться только на имена списков. Что-то в таком духе (так не работает)
Код: xml
1.
2.
3.
4.
5.
6.
7.
<Window x:Class="DataContent_на_XAML___Wpf_.MainWindow"
 .........
        DataContext="{Binding StaticResource}" ..... >
...........
        <ListBox ..... ItemsSource="{Binding  ListDays}"/>
        <ListBox ........ ItemsSource="{Binding  ListMonths}"/>
 ..........


То есть получить, что-то аналогичное ссылке на источник и потом привязке к его свойствам.
Суть в том, что хочу сделать несколько источников в словаре.
В первоначальном варианте, надо при переключении наборов данных перебивать все привязки ItemsSorce элементов.
Мне было бы гораздо удобнее, если изменить только в одном месте DataContext.
Естественно, интересует как сделать это в XAML без кода C# - в учебных целям.
...
Рейтинг: 0 / 0
24.09.2018, 11:24
    #39706853
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Ну попробуйте запихнуть эти два массива еще в один массив и обращайтесь к элементам по индексу а в контексте переключайте сами массивы-хранилища.
Но в реальных приложениях так, конечно, не делают
...
Рейтинг: 0 / 0
24.09.2018, 12:00
    #39706890
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.Pro, спасибо за ответ!
Вы имеете ввиду записать в словаре следующим образом?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    <col:ArrayList x:Key="List1">

        <col:ArrayList x:Key="ListMonths">
            <sys:String>Январь</sys:String>
 ...........
        </col:ArrayList>
        <col:ArrayList x:Key="ListDays">
            <sys:String>Понедельник</sys:String>
 ............
       </col:ArrayList>
    </col:ArrayList>


НО указать ключи у вложенных элементов невозможно (или я не знаю как).
Если же их не указывать, то каким образом указать привязки в ItemsSorce ?
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Window x:Class= ................
     DataContext="{Binding Mode=OneWay, Source={StaticResource List1}}"
        ...............>
............
        <ListBox ItemsSource="{Binding ?????????}" ........./>
        <ListBox ItemsSource="{Binding ?????????}" ........./>
................
/Window>


Shocker.ProНо в реальных приложениях так, конечно, не делаютДа, согласен. Здесь цель несколько иная - учебная.
Допустим, при редактировании XAML окна - показываются элементы словаря (или другого XAML ресурса).
А в приложении привязка DataContext окна устанавливается на данные приложения.
...
Рейтинг: 0 / 0
24.09.2018, 12:07
    #39706897
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspНО указать ключи у вложенных элементов невозможно (или я не знаю как).
Если же их не указывать, то каким образом указать привязки в ItemsSorce ?Я же написал - обращение по индексу. Типа Item[0]. Только надо повспоминать/погуглить, как там обратиться к элементу массива, если мы и так в контексте массива
...
Рейтинг: 0 / 0
24.09.2018, 12:11
    #39706900
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspЗдесь цель несколько иная - учебная.
Раз цель учебная, то лучше запихнуть все данные в XML, и использовать XmlDataProvider. У списков, соответственно, будут просто разные XPath в биндингах. Это несколько полезнее с практической т.з.
...
Рейтинг: 0 / 0
24.09.2018, 14:12
    #39707015
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.Pro, я понял Вас об обращении по индексу. Но, насколько знаю, в XAML такое не возможно. Или я ошибаюсь?
Поэтому у Вас вторично, более конкретно, поинтересовался - "Что надо указать в привязке ItemsSource?"

Сон Веры Павловны, спасибо за внимание к моему вопросу.
Конечно можно сделать так
Файл DataXML.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Data>
  <ListMonths>
    <Month>Январь</Month>
    <Month>Февраль</Month>
    ...........
  </ListMonths>
  <ListDays>
    <Day>Понедельник</Day>
    <Day>Вторник</Day>
    ..........
  </ListDays>
</Data>


XAML
Код: xml
1.
2.
3.
4.
5.
6.
7.
    <Window.DataContext>
        <XmlDataProvider Source="DataXML.xml" XPath="Data" />
    </Window.DataContext>
    ..........
        <ListBox ItemsSource="{Binding  XPath=ListMonths/Month}" ........./>
        <ListBox ItemsSource="{Binding XPath=ListDays/Day}" ............/>
 ...........


Но использование XML - не решит данный вопрос так как мне хотелось бы.
Цели такие:
1. Имеется ли возможность это сделать средствами только XAML?
Может быть создать какой-нибудь дополнительный класс,
но чтобы он визуально отображался в XAML при редактировании?
Включая возможность изменения привязки DataContext из элемента WPF.
2. Если потом в приложении поменять Window.DataContext на источник с данными,
чтобы не пришлось менять привязки ItemsSource элементов окна.
С использованием XmlDataProvider привязки устанавливаются с помощью XPath,
а хотелось бы оставить их в виде {Binding Свойство}.
...
Рейтинг: 0 / 0
24.09.2018, 14:17
    #39707024
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspНо, насколько знаю, в XAML такое не возможно. Или я ошибаюсь?ошибаетесь

Eld HaspМожет быть создать какой-нибудь дополнительный класс,
но чтобы он визуально отображался в XAML при редактировании?Это решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C#
...
Рейтинг: 0 / 0
24.09.2018, 14:17
    #39707025
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.ProEld HaspМожет быть создать какой-нибудь дополнительный класс,
но чтобы он визуально отображался в XAML при редактировании?Это решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C#Это и будет MVVM, под это и заточен WPF
...
Рейтинг: 0 / 0
24.09.2018, 14:53
    #39707078
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
в Binding можно использовать индексатор

ItemsSource="{Binding [0], Source={StaticResource MyRes}}"
ItemsSource="{Binding [1], Source={StaticResource MyRes}}"

Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<Window x:Class="WpfApp13.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp13"
        xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <col:ArrayList x:Key="MyLists">
            <col:ArrayList>
                <sys:String>Январь</sys:String>
                <sys:String>Февраль</sys:String>
                <sys:String>Март</sys:String>
                <sys:String>Апрель</sys:String>
                <sys:String>Май</sys:String>
                <sys:String>Июнь</sys:String>
                <sys:String>Июль</sys:String>
                <sys:String>Август</sys:String>
                <sys:String>Сентябрь</sys:String>
                <sys:String>Октябрь</sys:String>
                <sys:String>Ноябрь</sys:String>
                <sys:String>Декабрь</sys:String>
            </col:ArrayList>
            <col:ArrayList>
                <sys:String>Понедельник</sys:String>
                <sys:String>Вторник</sys:String>
                <sys:String>Среда</sys:String>
                <sys:String>Четверг</sys:String>
                <sys:String>Пятница</sys:String>
                <sys:String>Суббота</sys:String>
                <sys:String>Воскресенье</sys:String>
            </col:ArrayList>
        </col:ArrayList>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox ItemsSource="{Binding [0], Mode=OneWay, Source={StaticResource MyLists}}" HorizontalAlignment="Center" VerticalAlignment="Top"  Margin="10"/>
        <ListBox ItemsSource="{Binding [1], Mode=OneWay, Source={StaticResource MyLists}}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10"/>
    </Grid>
</Window>



Думаю намекать на то, что индексатор может быть и строковым не нужно :)
...
Рейтинг: 0 / 0
24.09.2018, 15:05
    #39707100
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld Hasp1. Имеется ли возможность это сделать средствами только XAML?
Может быть создать какой-нибудь дополнительный класс,
но чтобы он визуально отображался в XAML при редактировании?
Разумеется:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<XmlDataProvider x:Key="XmlData">
  <x:XData>
    <root xmlns="">
      <MonthNames>
        <value>Январь</value>
        <value>Февраль</value>
        .............
        <value>Ноябрь</value>
        <value>Декабрь</value>
      </MonthNames>
      <DayNames>
        <value>Понедельник</value>
        <value>Вторник</value>
        .............
        <value>Суббота</value>
        <value>Воскресенье</value>
      </DayNames>
    </root>
  </x:XData>
</XmlDataProvider>


Eld Hasp2. Если потом в приложении поменять Window.DataContext на источник с данными,
чтобы не пришлось менять привязки ItemsSource элементов окна.
С использованием XmlDataProvider привязки устанавливаются с помощью XPath,
а хотелось бы оставить их в виде {Binding Свойство}.
В такой постановке задача сводится к десериализации кастомного объекта из XAML-разметки. Вариантов здесь 2: 1) xml-данные от провайдера, как было показано выше, плюс десериализация в конвертере; 2) Писать свой объект, в XAML прописывать заполнение всех его свойств.

Пример:
1. Данные:
Код: c#
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.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows.Data;
using System.Xml;

namespace wpftest2
{
  public class MyWindowData
  {
    public MyWindowData()
    {
      MonthNames = new List<string>();
      DayNames = new List<string>();
    }

    public MyWindowData(XmlNode xdata)
    {
      var months = xdata.SelectNodes("/root/MonthNames/value/text()");
      MonthNames = months?.Cast<XmlText>().Select(n => n.Value).ToList();
      var days = xdata.SelectNodes("/root/DayNames/value/text()");
      DayNames = days?.Cast<XmlText>().Select(n => n.Value).ToList();
    }

    public List<string> MonthNames { get; }
    public List<string> DayNames { get; }
  }

  public class MyWindowDataConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      if (!(value is IList<XmlNode> list) || !list.Any()) return null;
      return new MyWindowData(list[0]);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      throw new NotImplementedException();
    }
  }
}


2. Словарь с данными:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:l="clr-namespace:wpftest2"
  xmlns:system="clr-namespace:System;assembly=mscorlib">

  <XmlDataProvider x:Key="XmlData">
    <x:XData>
      <root xmlns="">
        <MonthNames>
          <value>Январь</value>
          <value>Февраль</value>
          <value>Март</value>
          <value>Апрель</value>
          <value>Май</value>
          <value>Июнь</value>
          <value>Июль</value>
          <value>Август</value>
          <value>Сентябрь</value>
          <value>Октябрь</value>
          <value>Ноябрь</value>
          <value>Декабрь</value>
        </MonthNames>
        <DayNames>
          <value>Понедельник</value>
          <value>Вторник</value>
          <value>Среда</value>
          <value>Четверг</value>
          <value>Пятница</value>
          <value>Суббота</value>
          <value>Воскресенье</value>
        </DayNames>
      </root>
    </x:XData>
  </XmlDataProvider>

  <l:MyWindowData x:Key="MyWindowData">
    <l:MyWindowData.MonthNames>
      <system:String>Январь</system:String>
      <system:String>Февраль</system:String>
      <system:String>Март</system:String>
      <system:String>Апрель</system:String>
      <system:String>Май</system:String>
      <system:String>Июнь</system:String>
      <system:String>Июль</system:String>
      <system:String>Август</system:String>
      <system:String>Сентябрь</system:String>
      <system:String>Октябрь</system:String>
      <system:String>Ноябрь</system:String>
      <system:String>Декабрь</system:String>
    </l:MyWindowData.MonthNames>
    <l:MyWindowData.DayNames>
      <system:String>Понедельник</system:String>
      <system:String>Вторник</system:String>
      <system:String>Среда</system:String>
      <system:String>Четверг</system:String>
      <system:String>Пятница</system:String>
      <system:String>Суббота</system:String>
      <system:String>Воскресенье</system:String>
    </l:MyWindowData.DayNames>
  </l:MyWindowData>
</ResourceDictionary>


3. Фрагмент App.xaml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="/wpftest2;component/XData.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <wpftest2:MyWindowDataConverter x:Key="MyWindowDataConverter" />
  </ResourceDictionary>
</Application.Resources>


4. Разметка окна:
Код: 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.
<Window
  x:Class="wpftest2.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d"
  WindowStartupLocation="CenterScreen"
  DataContext="{StaticResource MyWindowData}"
  Title="MainWindow" Height="350" Width="525">

  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <ListBox
      Margin="5"
      ItemsSource="{Binding MonthNames}" />
    <ListBox
      Grid.Column="1"
      Margin="5"
      ItemsSource="{Binding DayNames}" />
  </Grid>
</Window>


Соответственно, можно датаконтекст окна переключить на
Код: sql
1.
DataContext="{Binding Source={StaticResource XmlData}, Converter={StaticResource MyWindowDataConverter}}"


Мне вариант с XML-десериализацией в конвертере нравится больше - выглядит изящнее, и дает возможность использовать десериализацию с помощью XmlSerializer (а для возможности автоматической десериализации объекта из XAML накладывается слишком много всяких ограничений - например, возврат конкретной реализации (List<T>) вместо интерфейса является следствием этих ограничений).
...
Рейтинг: 0 / 0
24.09.2018, 15:05
    #39707101
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Roman MejtesBinding [0]Вот прям так втупую path начинается с квадратной скобки?
Я просто сам поленился попробовать, но думал, что надо использовать что-то типа Item, потому что где-то мне приходилось его использовать, но не помню где.

Roman MejtesДумаю намекать на то, что индексатор может быть и строковым не нужно :)А как это поможет (если на C# мораторий)? Использовать какой-то необобщенный словарь в качестве хранилища?
...
Рейтинг: 0 / 0
24.09.2018, 15:27
    #39707119
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.ProЭто решение, которое напрашивается в качестве контейнера, но вы же сами запретили пользоваться C#Я хочу избежать этого, если возможно.
И в любом случае, если создавать такой дополнительный класс, то надо чтобы он отображал свои значения во время редактирования XAML.
То есть создать класс, а объект (экземпляр) этого класс создать в XAML и там же присваивать ему значения.
Но я плохо владею этой частью. Так что - это смутные мысли по моему представлению.
Если можете - подскажите.

Roman Mejtes,в Binding можно использовать индексаторСпасибо!
Не знал. Подсказал Shocker.Pro - но я не понял как.
Пробовал указывать просто номер индекса, а что-то вариант указания со скобками в голову не пришёл.
Переделал так.
Код: xml
1.
2.
3.
4.
5.
6.
7.
<Window x:Class=..............
        DataContext="{Binding Mode=OneWay, Source={StaticResource MyLists}}">
..............
        <ListBox ItemsSource="{Binding [0]}"  ...................../>
        <ListBox ItemsSource="{Binding [1]}" ................./>
.................
</Window>


Уже ближе к тому чего добиваюсь.
Но хотелось бы, если возможно, вариант с указанием ключей/свойств.
...
Рейтинг: 0 / 0
24.09.2018, 15:31
    #39707120
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspТо есть создать класс, а объект (экземпляр) этого класс создать в XAML и там же присваивать ему значения.
Но я плохо владею этой частью. Так что - это смутные мысли по моему представлению.
Если можете - подскажите.
Выше же пример именно это и делает.
...
Рейтинг: 0 / 0
24.09.2018, 15:35
    #39707127
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Сон Веры ПавловныВ такой постановке задача сводится к десериализации кастомного объекта из XAML-разметки. Если я правильно понял. То создать по объекту XML данные и их привязывать к DataContext.
Получится несколько наборов XML данных - для времени редактирования и исполнения. И возможность переключения между ними.
Я правильно понял?
...
Рейтинг: 0 / 0
24.09.2018, 15:37
    #39707131
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspИ в любом случае, если создавать такой дополнительный класс, то надо чтобы он отображал свои значения во время редактирования XAML.Зачем ему отображать СВОИ значения. Вы сделаете контейнер, а значения будете ЗАДАВАТЬ в XAML. Фактически заменить ArrayList на собственный контейнер, все остальное - то же самое.

По идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C#
...
Рейтинг: 0 / 0
24.09.2018, 15:38
    #39707133
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Сон Веры ПавловныВыше же пример именно это и делает. Ещё не успел разобраться с ним - только смотрю.
...
Рейтинг: 0 / 0
24.09.2018, 15:41
    #39707135
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.ProПо идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C#типа так, как вы и хотели изначально
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    <col:ListDictionary x:Key="List1">

        <col:ArrayList x:Key="ListMonths">
            <sys:String>Январь</sys:String>
 ...........
        </col:ArrayList>
        <col:ArrayList x:Key="ListDays">
            <sys:String>Понедельник</sys:String>
 ............
       </col:ArrayList>
    </col:ArrayList>
...
Рейтинг: 0 / 0
24.09.2018, 15:42
    #39707136
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.ProЗачем ему отображать СВОИ значения. Вы сделаете контейнер, а значения будете ЗАДАВАТЬ в XAML. Фактически заменить ArrayList на собственный контейнер, все остальное - то же самое.

По идее, можно попробовать с ListDictionary - задавать ключи с помощью x:Key, а обращаться к ним через индексатор. Тогда может прокатит без кода на C#Очень смутно в этой части (как создать и использовать свой контейнер) соображаю. Поэтому и обратился за помощью.
Ключи во вложенных элементах ArrayList задать не получается, или я что-то не правильно делаю.
...
Рейтинг: 0 / 0
24.09.2018, 15:44
    #39707138
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspОчень смутно в этой части (как создать и использовать свой контейнер) соображаю. Поэтому и обратился за помощью.
обычный POCO класс с двумя коллекциями
Код: c#
1.
2.
3.
4.
5.
public class MyContainer
{
  public List<string> ListMonths {get;set;}
  public List<string> ListDays {get;set;}
}
...
Рейтинг: 0 / 0
24.09.2018, 15:45
    #39707139
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspКлючи во вложенных элементах ArrayList задать не получается, или я что-то не правильно делаю.Выше пример с ListDictionary, правда я не пробовал
...
Рейтинг: 0 / 0
24.09.2018, 15:53
    #39707147
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.Proобычный POCO класс с двумя коллекциями ..............А как его использовать в XAML?
Класс создал в локальном пространстве, но с префиксом local: его не видно.
...
Рейтинг: 0 / 0
24.09.2018, 15:57
    #39707152
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.Proтипа так, как вы и хотели изначально
Код: xml
1.
    <col:ListDictionary x:Key="List1">


У меня на этой строчке ошибку выдаёт " Не удалось найти тип "col:ListDictionary"....".
Может какие-то ссылки подключить надо?
...
Рейтинг: 0 / 0
24.09.2018, 16:07
    #39707165
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
У меня впечатление складывается, что вы не почитали литературу по WPF, а пытаетесь все делать методом тыка. Не получится. Освойте неймспейсы, чтобы аббревиатура xmlns не казалась вам абракадаброй
...
Рейтинг: 0 / 0
24.09.2018, 16:28
    #39707182
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Shocker.Pro...... чтобы аббревиатура xmlns не казалась вам абракадабройНе спорю - порой кажется.
Но в данном случае col у меня ссылается на "clr-namespace:System.Collections;assembly=mscorlib"
ArrayList из этого же пространства.
ListDictionary - из пространства System.Collections.Specialized. И по префиксу col - он не находится.
Поэтому не пойму, то ли я что-то не так делаю.
Толи ещё надо префиксы определить?
...
Рейтинг: 0 / 0
24.09.2018, 16:34
    #39707187
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataContent на XAML (WPF)
Eld HaspShocker.Proобычный POCO класс с двумя коллекциями ..............А как его использовать в XAML?
Класс создал в локальном пространстве, но с префиксом local: его не видно.
Сон Веры ПавловныВыше же пример именно это и делает.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataContent на XAML (WPF) / 25 сообщений из 39, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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