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

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

12.01.2022, 22:23. Показов 21878. Ответов 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
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,767
Записей в блоге: 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
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,767
Записей в блоге: 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
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 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
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru