Форум программистов, компьютерный форум, киберфорум
C#: XAML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/76: Рейтинг темы: голосов - 76, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205

Avalonia (отображение списка строк)

12.01.2022, 22:23. Показов 21071. Ответов 98
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста, в каком элементе управления в Авалонии лучше выводить список строк, чтобы потом можно было выделить какие-то строки и скопировать их, например, в Excel? Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2022, 22:23
Ответы с готовыми решениями:

Avalonia
Приходилось ли кому работать с сабжем ? С WPF знаком не сильно. Но нужна кроссплатформенность. Собственно сабж это и позволяет, грубо...

ListView - ping строки, выбираемой из списка/отображение списка онлайн машин в сети
Доброй ночи, форумчане! Возник насущный вопрос... Может быть, уже и обсуждался, но, по неведомым мне причинам, или я не понял, или не...

Скрытие\отображение нового списка при выборе значения из списка
Например при выборе option(1,2,3,5) должен появиться другой список который указывает количество сахара, а при выборе option(4) должен...

98
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
27.01.2022, 09:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sun1212 Посмотреть сообщение
Как сделать, чтобы все элементы списка оказались в одном TextBox, чтобы потом можно было выделить несколько строк и скопировать их в Excel?
Вообще-то выше был пример, в котором выделенные элементы списка отображались в одном TextBox, чтобы их можно было скопировать куда угодно...
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
27.01.2022, 09:25  [ТС]
Andrey-MSK, спасибо, а если нужно сделать копирование в Excel или Word не с помощью кнопки "Сохранить отчет в Еxcel", а с помощью контекстного меню при выделении нескольких строк ListBox?
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
27.01.2022, 09:30
Цитата Сообщение от Sun1212 Посмотреть сообщение
а с помощью контекстного меню при выделении нескольких строк ListBox?
Тогда на этот пункт меню вешается команда, которая забирает коллекцию SelectedItems из привязанных данных этого элемента и делает с ними тоже самое что и выше.
Запомните - элемент UI только отображает данные, он не хранит их и не манипулирует ими.
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
27.01.2022, 09:31  [ТС]
Someone007, вот этот вариант?

Цитата Сообщение от Someone007 Посмотреть сообщение
<ListBox Grid.Row="1" Items="{Binding Items}"
                          SelectedItems="{Binding SelectedItems}"
                           SelectionMode="Multiple" />
                    <TextBox Grid.Row="2" Text="{Binding SelectedItemsAsText}" />
Если в ListBox будет 200 строк и ниже будет еще TextBox c выделенными строками, наверно будет не очень удобно...Хотелось сделать в одном элементе управления возможность выбора строк и с помощью контекстного меню их скопировать, например, в Excel
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
27.01.2022, 09:34
Цитата Сообщение от Sun1212 Посмотреть сообщение
Хотелось сделать в одном элементе управления возможность выбора строк и с помощью контекстного меню их скопировать, например, в Excel
Так сделайте, добавьте тоже контекстное меню например, с командой по которой будут копироваться в Clipboard выделенные элементы...
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
27.01.2022, 09:34  [ТС]
Andrey-MSK, если не трудно, можете какой-нибудь пример выслать?
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,696
Записей в блоге: 4
27.01.2022, 09:44
Sun1212, вот такая команда на моей кнопке
C#
1
2
3
4
        private async void CreateReportExecuted(object obj)
        {
            await CreateXLReportByDateAsync(_eObject, DateStart, DateEnd);
        }
Как видите, она просто вызывает метод, который я показал выше, и передает в него необходимые параметры, к которым привязаны элементы UI - это дата начала и дата окончания периода.

Добавлено через 6 минут
Цитата Сообщение от Sun1212 Посмотреть сообщение
если не трудно, можете какой-нибудь пример выслать?
Почитайте вот это - Паттерн MVVM.
Если поймёте что это такое, тогда практически 90% вопросов сами испарятся. Это конечно с учетом того, что вы умеете делать экспорт в Excel самостоятельно. Если не умеете, то вначале разберитесь с ним, а потом уже переходите на изучение MVVM и WPF.

Добавлено через 3 минуты
Sun1212, Для экспорта я использую ClosedXML. Это проще и быстрее чем Interop. Пример работы с ним в моём сообщении выше.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
27.01.2022, 10:07
Вот предыдущий пример, дополненный контекстным меню для копирования выбранных элементов...

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
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaApplication3.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        Height="400" Width="600"
        x:Class="AvaloniaApplication3.Views.MainWindow"
        Icon="/Assets/avalonia-logo.ico"
        Title="AvaloniaApplication3">
 
    <Design.DataContext>
        <vm:MainWindowViewModel/>
    </Design.DataContext>
 
    <TabControl SelectedIndex="{Binding SelectedTabIndex}">
        <TabItem Header="Tab 1" >
            <StackPanel>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
 
                    <Button Grid.Row="0" Content="Cформировать" Command="{Binding DoTheThing}" />
                    <ListBox Grid.Row="1" Items="{Binding Items}" SelectedItems="{Binding SelectedItems}" SelectionMode="Multiple">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding}">
                                    <TextBlock.ContextMenu>
                                        <ContextMenu>
                                            <MenuItem Header="Copy" Command="{Binding $parent[ListBox].DataContext.CopySelectedItems}"/>
                                        </ContextMenu>
                                    </TextBlock.ContextMenu>
                                </TextBlock>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                    <TextBox Grid.Row="2" Text="{Binding SelectedItemsAsText}" />
                </Grid>
            </StackPanel>
        </TabItem>
 
        <TabItem Header="Tab 2">
            <TextBlock Text="Hi World!" />
        </TabItem>
    </TabControl>
</Window>
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
44
45
46
47
48
49
50
51
52
53
54
55
using Avalonia;
using DynamicData;
using DynamicData.Binding;
using ReactiveUI;
using System.Collections.ObjectModel;
using System.Reactive;
using System.Reactive.Linq;
using System.Threading.Tasks;
 
namespace AvaloniaApplication3.ViewModels
{
    public class MainWindowViewModel : ViewModelBase
    {
        private int _selectedTabIndex;
 
        public int SelectedTabIndex
        {
            get => _selectedTabIndex;
            set => this.RaiseAndSetIfChanged(ref _selectedTabIndex, value);
        }
 
        public ReactiveCommand<Unit, Unit> DoTheThing { get; }
        public ReactiveCommand<Unit, Unit> CopySelectedItems { get; }
 
        public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string> { "Иван", "Андрей", "Аполлинарий" };
        public ObservableCollection<string> SelectedItems { get; set; } = new ObservableCollection<string>();
 
        private readonly ObservableAsPropertyHelper<string> _selectedItemsAsText;
        public string SelectedItemsAsText => _selectedItemsAsText.Value;
 
        public MainWindowViewModel()
        {
            DoTheThing = ReactiveCommand.Create(RunTheThing);
            CopySelectedItems = ReactiveCommand.CreateFromTask(CopySelectedItemsToClipboard);
 
            _selectedItemsAsText = SelectedItems
                .ToObservableChangeSet()
                .ToCollection()
                .Select(x => string.Join(" ", x))
                .ToProperty(this, x => x.SelectedItemsAsText);
        }
 
        void RunTheThing()
        {
            SelectedTabIndex = 1;
        }
 
        async Task CopySelectedItemsToClipboard()
        {
            string seleсtedText = string.Join(",", SelectedItems);
            var clipboard = Application.Current.Clipboard;
            await clipboard.SetTextAsync(seleсtedText);
        }
    }
}
3
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
27.01.2022, 20:24  [ТС]
Someone007, попробовала применить Ваш код - получилось, что при выделении нескольких элементов списка контекстное меню не включается...или я неправильно выделяю. Вы как выделяете несколько элементов - с помощью нажатия Ctrl?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
27.01.2022, 20:39
Цитата Сообщение от Sun1212 Посмотреть сообщение
Вы как выделяете несколько элементов - с помощью нажатия Ctrl?
Да. И меню появляется только над текстом, над пустым место не появляется.
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
27.01.2022, 20:58  [ТС]
Someone007, Спасибо большое! Всё получилось!

Поясните, пожалуйста, в команде
Command="{Binding $parent[ListBox].DataContext.CopySelectedItems}"/что означает $parent[ListBox].DataContext?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
27.01.2022, 21:28
Цитата Сообщение от Sun1212 Посмотреть сообщение
что означает $parent[ListBox].DataContext?
https://docs.avaloniaui.net/do... n-ancestor

Добавлено через 5 минут
Так наверно лучше будет, меню теперь не только над текстом открывается...
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
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaApplication3.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        Height="400" Width="600"
        x:Class="AvaloniaApplication3.Views.MainWindow"
        Icon="/Assets/avalonia-logo.ico"
        Title="AvaloniaApplication3">
 
    <Design.DataContext>
        <vm:MainWindowViewModel/>
    </Design.DataContext>
 
    <TabControl SelectedIndex="{Binding SelectedTabIndex}">
        <TabItem Header="Tab 1" >
            <StackPanel>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
 
                    <Button Grid.Row="0" Content="Cформировать" Command="{Binding DoTheThing}" />
                    <ListBox Grid.Row="1" Items="{Binding Items}" SelectedItems="{Binding SelectedItems}" SelectionMode="Multiple">
                        <ListBox.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Copy" Command="{Binding CopySelectedItems}" />
                            </ContextMenu>
                        </ListBox.ContextMenu>
                    </ListBox>
                    <TextBox Grid.Row="2" Text="{Binding SelectedItemsAsText}" />
                </Grid>
            </StackPanel>
        </TabItem>
 
        <TabItem Header="Tab 2">
            <TextBlock Text="Hi World!" />
        </TabItem>
    </TabControl>
</Window>
3
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
29.01.2022, 19:47  [ТС]
Someone007, спасибо Вам большое!!

А если наблюдаемая коллекция Items будет содержать данные вида:

"Название Номер Значение"
"A1 0.01 0.02"
"A2 0.02 0.03"

как сделать, чтобы ListBox отобразился в более читабельном виде с табуляцией?

"Название Номер Значение"
"A1 \t\t\t 0.01 t 0.02"
"A2 \t\t\t 0.02 \t 0.03"
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.01.2022, 20:20
Цитата Сообщение от Sun1212 Посмотреть сообщение
как сделать, чтобы ListBox отобразился в более читабельном виде с табуляцией?
Придётся задавать или пользовательский конвертер, или шаблон элемента.
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
29.01.2022, 20:48  [ТС]
Элд Хасп, нигде не могу найти про такое, на официальном сайте Авалонии - нет
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
29.01.2022, 21:00
Sun1212, https://metanit.com/sharp/wpf/11.3.php
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
29.01.2022, 21:17
Цитата Сообщение от Sun1212 Посмотреть сообщение
нигде не могу найти про такое, на официальном сайте Авалонии - нет
Ну, наш Форум по круче какой-то там Авалонии....


WPF конвертеры
2
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
01.02.2022, 11:58  [ТС]
Цитата Сообщение от Sun1212 Посмотреть сообщение
как сделать, чтобы ListBox отобразился в более читабельном виде с табуляцией?
"Название Номер Значение"
"A1 \t\t\t 0.01 t 0.02"
"A2 \t\t\t 0.02 \t 0.03"
Правильно ли так будет?

XML
1
<TextBlock Text = "{Binding StringFormat='{}   {0}   {1}   {2} '}}" />
Как написать StringFormat, начиная со второй строки? (Можно колонки таблицы оставить без изменения "Название Номер Значение")
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
01.02.2022, 12:10
Цитата Сообщение от Sun1212 Посмотреть сообщение
Как написать StringFormat, начиная со второй строки?
Нужно конвертёр сделать. Попытаетесь?
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
01.02.2022, 12:20  [ТС]
limeniye, помогите, пожалуйста!!!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class StringFormatConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // Проверка на передаваемый тип String
            if (value is string valStr))
                return valStr;
 
             // Проверка на передаваемый тип Double
              if (value is double valStr && bool.TryParse(valStr, out valStr))
                return !valStr;
        }
}
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
             throw new ArgumentException();
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2022, 12:20

Скрытие\отображение нового списка при выборе значения из списка с выбором одного элемента
Добрый день!Существует список из которого нужно выбрать один элемент, с выбором элемента отображается ниже другой список с выбором другого...

Отображение списка и работа с элементом списка
Всем привет. Я пишу программу, используя MVC, которая будет выводить список тестов, сохраненных в базе в браузер. Когда пользователь...

Даны два списка строк. Из списка один удалить повторяющиеся элементы списка два
Даны два списка строк. Из списка один удалить повторяющиеся элементы списка два.

Avalonia, азы
Как на Авалонии создать кнопку, которая при клике на нее вызовет окно, на котором выведется текст, к примеру: Привет, юзер! Саму кнопку я...

Для одноуровневого списка строк сформировать итоговую строку сцеплением всех элементов списка
Определить функцию, которая для одноуровневого списка строк формирует итоговую строку сцеплением всех элементов списка. Элементы в итоговой...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru