Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/120: Рейтинг темы: голосов - 120, средняя оценка - 4.81
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672

Создание простого Binding'a (привязка класса к ListBox)

06.04.2012, 00:34. Показов 24917. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При освоении технологии binding столкнулся с проблемой. Есть ListBox и есть, скажем класс Person. Определяем ObservableCollection<Person> ppl и хотим привязать его содержимое в ListBox. Для этого делаю следующее:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Grid>
        <ListBox ItemsSource="{Binding Path=ppl}" Height="194" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="151">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid ShowGridLines="True">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="20" />
                            <ColumnDefinition Width="20" />
                        </Grid.ColumnDefinitions>
 
                        <TextBlock Text="{Binding Name}"
                                           Grid.Column="0" />
                        <TextBlock Text="{Binding Age}"
                                           Grid.Column="1" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="182,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
В Code Behind:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<Person> ppl;
        public MainWindow()
        {
            InitializeComponent();
            ppl = new ObservableCollection<Person>();
      //     listBox1.ItemsSource = ppl;
            ppl.Add(new Person { Name = "One", Age = 15 });
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ppl.Add(new Person { Name = "Two", Age = 25 });
   
        }
    }
}
Окно ListBox остается пустым. В интернете нашел инфу что надо реализовывать некий интерфейс, но если раскомментировать строку // listBox1.ItemsSource = ppl; то все работает....да и где то видел приимер привязки без этого самого интерфейса.
Спасибо

Добавлено через 17 часов 6 минут
Неужели нет ответа на вроде бы простой вопрос?
2
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2012, 00:34
Ответы с готовыми решениями:

Создание простого класса
Приветствую Вас, программисты! Решите мне, пожалуйста, одну задачку на простые классы. Сейчас работаю на Visual Studio 2012 с линейными...

Создание простого класса Rectangle
задание Реализовать класс Rectangle. Полями являются его стророны — положительные числа с плавающей точкой. Требуется реализовать...

Создание столбцов в DataGridView и привязка к свойствам класса
Помогите пожалуйста, как можно привязать DataGridView к коллекции объектов некоторого класса, чтобы отображались те свойства и с теми...

23
14 / 14 / 3
Регистрация: 18.02.2011
Сообщений: 53
06.04.2012, 01:01
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
если раскомментировать строку // listBox1.ItemsSource = ppl; то все работает....
ну так сделайте это.
Не понятно в чем проблема. Не работает привязка в xaml'е? или не обновляются значения в ListBox'е при изменении коллекции?(реализует ли класс Person интерфейс INotifyPropertyChanged?)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
06.04.2012, 02:39  [ТС]
Если раскомментировать строку, то все работает. Проблема в том, что я хочу чтобы работало без вмешательства в код. Интерфейс реализовывать не обязательно т.к и без него должно работать. Суть проблемы что привязка работает из Code Behind и не работает из xaml. Мне нужно решить проблему привязки средствами xaml
0
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
06.04.2012, 15:15
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Во-первых, я сомневаюсь, что может работать привязка к полю, оформите ppl как свойство.
Во-вторых, биндинг в xaml написан неправильно. В текущем варианте свойство с таким именем ищется в объекте DataContext листбокса (и далее вверх по иерархии). Чтобы свойство искалось в объекте окна, нужно использовать свойство биндинга RelativeSource:
XML
1
ItemsSource="{Binding Path=ppl,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}"
2
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
06.04.2012, 22:02  [ТС]
Спасибо, так работает. А как быть если коллекция находиться внутри другого класса? Например есть клас MyClass.cs екземпляр которого есть в MainWindow.cs и внутри клаccа коллекция ppl. Как тогда задать путь правильно?
0
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
09.04.2012, 08:19
Можно изменить путь биндинга. Допустим, свойство окна, возвращающее экземпляр класса MyClass, называется Property1. Тогда путь будет выглядеть так:
XML
1
Path=Property1.ppl
А лучше использовать свойство окна DataContext:
C#
1
2
3
4
5
6
7
8
9
        public MainWindow()
        {
            InitializeComponent();
            ObservableCollection<Person> persons = new ObservableCollection<Person>();
            persons.Add(new Person { Name = "One", Age = 15 });
            MyClass myClass = new MyClass();
            myClass.ppl = persons;
            this.DataContext = myClass;
        }
В этом случае надо вернуться к первоначальному варианту выражения для биндинга:
XML
1
ItemsSource="{Binding Path=ppl}"
2
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.04.2012, 16:13  [ТС]
Большое спасибо)
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
06.11.2015, 21:17
Ereona, Как быть, если структура классов такая:


C#
1
2
3
4
5
6
7
8
9
10
11
12
public partial class ProgrammData
{
    public string ProductName { get; set; }
    public ICollection<ProgrammID> ProgramID { get; set; }
}
 
public class ProgramID
{
    public string Version { get; set; }
    public string Edition { get; set; }
 
}
Цель: запихнуть в ListBox, состоящий из 3-х столбцов информацию в виде:

|ProductName | Versions | Editions |
|----------------|-----------|----------|
|"My Program"| 1,2,3 | 2.*, 3.* |


Т.е. как быть, если основной класс, содержит несколько подклассов, свойства которых хочется объединить в 1 строку или запихнуть в 1 столбец. Свойства в ProgramID обязательно будут не NULL.

Добавлено через 1 минуту
Цитата Сообщение от Ereona Посмотреть сообщение
Path=Property1.ppl
выдаст пустоту.

Добавлено через 1 час 33 минуты
"простой Binding" превратился в создание стиля ListBoxItem и дополнительного класса стиля с методом "сбора" всех свойств подклассов в одну строку. Было весело
0
 Аватар для Ereona
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
07.11.2015, 16:04
Тут для биндинга можно использовать конвертер.
0
07.11.2015, 16:57  [ТС]

Не по теме:

Я сначала непонял что за тема такая...потом на дату посмотрел =)

0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
07.11.2015, 17:01
Цитата Сообщение от Ereona Посмотреть сообщение
конвертер
В стиле ListBox добавил TextBlock c
C#
1
Text="{Binding VersionsString}"
В классе описал
C#
1
2
3
4
5
6
7
8
9
10
11
12
public partial class ProgrammData
{
/////
public string VersionsString
        {
            get
            {
                return string.Join(", ", ProgrammID.Select(i => i.Version));
            }
        }
/////
}
В коде сделал привязку ListBox к стилю и добавил ItemsSource класс ProgrammData

Добавлено через 29 секунд
Работает. Правильно сделал?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.04.2018, 10:30
А вот мне интересно равносилен ли данный приведенный вариант:
Цитата Сообщение от Ereona Посмотреть сообщение
XML
1
ItemsSource="{Binding Path=ppl,RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}"
вот этому:
XML
1
2
3
4
<Window x:Class="WpfApplication.Test"
        Name="TestWindow">
...
ItemsSource="{Binding Path=ppl, ElementName=TestWindow}"
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
28.04.2018, 17:43
SatanaXIII,
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А вот мне интересно равносилен ли данный приведенный вариант
Да, равносилен
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.08.2018, 11:45
Цитата Сообщение от Bretbas Посмотреть сообщение
Да, равносилен
А в чем же разница?

Если кто может, поясните пожалуйста следующий пример:
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
<Window x:Class="DataGrid_RelativeSource_vs_ElementName.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataGrid_RelativeSource_vs_ElementName.MainWindow" Height="350" Width="525"
        Name="DGForm">
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
            
        <DataGrid Grid.Column="0"
                  AutoGenerateColumns="True" 
                  Name="DG1"
                  ItemsSource="{Binding Path=DGItems,
                                        ElementName=DGForm}"
            />
            
        <DataGrid Grid.Column="1"
                  AutoGenerateColumns="True" 
                  Name="DG2"
                  ItemsSource="{Binding Path=DGItems, 
                                        RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
                />
    </Grid>
    
</Window>

Код C#
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
namespace DataGrid_RelativeSource_vs_ElementName
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public System.Collections.ObjectModel.ObservableCollection<DGItem> DGItems { get; set; }
 
        public MainWindow()
        {
            InitializeComponent();
 
            DGItems = new System.Collections.ObjectModel.ObservableCollection<DGItem>();
            
            DGItems.Add(new DGItem("S", 1));
            DGItems.Add(new DGItem("Q", 2));
            DGItems.Add(new DGItem("R", 3));
 
            //DG1.ItemsSource = DGItems; // Установка источника DG1
        }
    }
    // Здесь реализация класса DGItem
}

Вспомогательный класс DGItem
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
public class DGItem : System.ComponentModel.INotifyPropertyChanged
{
    private string nameItem = string.Empty;
    public string NameItem
    {
        get { return nameItem; }
        set { nameItem = value; NotifyPropertyChanged("NameItem"); }
    }
 
    private int indexIetm = 0;
    public int IndexIetm
    {
        get { return indexIetm; }
        set { indexIetm = value; NotifyPropertyChanged("IndexIetm"); }
    }
    
    #region PropertyChanged
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
 
 
    public DGItem(string Name, int Index)
    {
        NameItem = Name;
        IndexIetm = Index;
    }
}


Два однотипных DataGrid, с одним источником, но чуть разным биндингом к этому источнику.
Если в коде C# расскомментировать двадцатую строку, где вручную устанавливается ItemsSource для DG1, то поведение обоих DataGrid становится одинаковым. Следовательно установка в XAML источника данных для DG1 через ElementName является неполной/нерабочей.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
22.08.2018, 10:50
Не совсем понял Ваш вопрос (оглядываясь на Ваш стаж). Это тест для начинающих: кто знает или не знает?
Я только месяц пытаюсь это изучить.
Ошибка в том, что при задании свойства DGItems оно не инициализируется и, соответственно, на момент инициализации DG1 оно установлено в null. Поэтому привязка, указанная в XAML, не создаётся.
Если DGItems инициализировать так (строка 3 в обоих вариантах):
Кликните здесь для просмотра всего текста
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
    public partial class MainWindow : Window, System.ComponentModel.INotifyPropertyChanged
    {
        public ObservableCollection<DGItem> DGItems { get; set; } = new ObservableCollection<DGItem>();
 
        #region PropertyChanged
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
        #endregion
 
        public MainWindow()
        {
            InitializeComponent();
 
            DGItems = new ObservableCollection<DGItem>
            {
                new DGItem("S", 1),
                new DGItem("Q", 2),
                new DGItem("R", 3)
            };
 
            //DG1.ItemsSource = DGItems; // Установка источника DG1
            NotifyPropertyChanged("DGItems");
        }
    }
или так
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public partial class MainWindow : Window, System.ComponentModel.INotifyPropertyChanged
    {
        public ObservableCollection<DGItem> DGItems { get; set; } = new ObservableCollection<DGItem>
            {
                new DGItem("S", 1),
                new DGItem("Q", 2),
                new DGItem("R", 3)
            };
 
        #region PropertyChanged
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
        #endregion
 
        public MainWindow()
        {
            InitializeComponent();
 
        }
    }
То привязка создаётся и всё работает как надо.

Добавлено через 2 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Следовательно установка в XAML источника данных для DG1 через ElementName является неполной/нерабочей.
Вывод не верен!

Добавлено через 6 минут
Третий вариант. Перенести инициалицацию свойства в конструкторе MainWindow до инициализации элементов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public MainWindow()
        {
 
            DGItems = new ObservableCollection<DGItem>
            {
                new DGItem("S", 1),
                new DGItem("Q", 2),
                new DGItem("R", 3)
            };
 
            ////DG1.ItemsSource = DGItems; // Установка источника DG1
 
            InitializeComponent();
        }
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.08.2018, 13:11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это тест для начинающих: кто знает или не знает?
Да нет. WPF это не мой конек, просто он мне интересен в данный момент.

Вся шутка использования ObservableCollection в том, чтобы как раз не использовать дополнительные события. Поэтому нагромождение, предложенное вами в первых двух вариантах, безусловно рабочее, но излишнее. А вот за третий вариант спасибо.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ошибка в том, что при задании свойства DGItems оно не инициализируется и, соответственно, на момент инициализации DG1 оно установлено в null. Поэтому привязка, указанная в XAML, не создаётся.
Я ожидал (не знаю почему), что DG1 проинициализируется не просто значением DGItems (то есть null), а той областью памяти, в которой оно расположено. И соответственно в дальнейшем, при обновлении коллекции, все заработает.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
22.08.2018, 18:10
Цитата Сообщение от SatanaXIII Посмотреть сообщение
а той областью памяти, в которой оно расположено
Ожидания не совсем верны. На сколько знаю, это, вообще, относится к C#, область памяти для ссылочных типов выделяется не после их объявления, а после создания объектов. А так как ссылка не была инициализирована, то, соответственно, ей область памяти не выделена и она ссылается на null. Эта ссылка на null и была присвоена как источник. А если ссылка изменилась, то известить об этом надо через механизмы INotifyPropertyChanged.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вся шутка использования ObservableCollection в том, чтобы как раз не использовать дополнительные события
Опять, может ошибаюсь, но, по моему, Вы неверно толкуете свойства класса ObservableCollection. Этот класс извещает источник об изменении количества элементов в списке. Но он не даёт уведомления об изменении значения элементов, и о переинициализации списка. Т.е. если Вам нужен новый список, то Вам его надо создавать через очистку (Clear) существующего и добавление (Add) новых элементов.
Если же Вы, как у Вас в коде, переинициализацию сделаете через new :
C#
1
2
3
4
5
6
            DGItems = new ObservableCollection<DGItem>
            {
                new DGItem("S", 1),
                new DGItem("Q", 2),
                new DGItem("R", 3)
            };
То элемент не получит извещения об изменении списка и будет отображать старый список. Для избежании этого я и осуществил в самом окне методы INotifyPropertyChanged. В третьем примере они тоже нужны, я просто не стал эту часть кода приводить, так как она одинаковая для всех случаев.

Добавлено через 3 минуты
Особенно учитывая что очень часто списки значений формируются через LINQ запросы. И каждый раз создаётся новый список - без INotifyPropertyChanged никак не обойтись...

Добавлено через 9 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Т.е. если Вам нужен новый список, то Вам его надо создавать через очистку (Clear) существующего и добавление (Add) новых элементов
Для иллюстрации - в таком виде тоже работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public partial class MainWindow : Window
    {
        public ObservableCollection<DGItem> DGItems { get; set; } = new ObservableCollection<DGItem>();
 
        public MainWindow()
        {
 
            InitializeComponent();
 
            DGItems.Add(new DGItem("S", 1));
            DGItems.Add(new DGItem("Q", 2));
            DGItems.Add(new DGItem("R", 3));
 
        }
    }
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
23.08.2018, 12:41
Да, слишком большие надежды я возложил на ObservableCollection.
Элд Хасп, спасибо за столь содержательный и конструктивный диалог.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
23.08.2018, 13:11
Цитата Сообщение от SatanaXIII Посмотреть сообщение
является неполной/нерабочей.
Вся соль в последовательности обработки и создания. Вот так заработает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public System.Collections.ObjectModel.ObservableCollection<DGItem> DGItems { get; set; }
 
public MainWindow()
{
 
    DGItems = new System.Collections.ObjectModel.ObservableCollection<DGItem>();
 
    DGItems.Add(new DGItem("S", 1));
    DGItems.Add(new DGItem("Q", 2));
    DGItems.Add(new DGItem("R", 3));
    InitializeComponent();
    DGItems.Remove(DGItems.First(r => r.IndexIetm == 1));//Для теста
}
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
23.08.2018, 13:16
skilllab, да, да, спасибо. Элд Хасп уже подсказал по поводу порядка инициализации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.08.2018, 13:16
Помогаю со студенческими работами здесь

Привязка Listbox не срабатывает
Привет всем! Не могу понять почему ListBox не срабатывает при привязке одним способом а другим способом всё хорошо работает, в чём таится...

ListBox, ComboBox и привязка
Здравствуйте. Покажите, пожалуйста, как реализовать следующее: Ситуация первая. Есть ListBox с тремя строками содержимого. Как при...

Привязка данных ListBox
Вообщем такая проблема....как связать ListBox со списком фотографий....на msdn есть пример &lt;ListBox ItemsSource=&quot;{Binding...

Привязка данных ListBox
Как привязать картинку и текст к листбоксу (xaml &amp; C#)??? Тоесть должна картинка и текст подгружатся с БД в колекцию, и потом с колекции в...

Привязка к ListBox SelectedItems
Есть простой ListBox с мультиселектом: ListBox SelectionMode=&quot;Multiple&quot; HorizontalAlignment=&quot;Left&quot; Height=&quot;100&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru