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

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

12.01.2022, 22:23. Показов 20919. Ответов 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
3376 / 2262 / 388
Регистрация: 14.08.2018
Сообщений: 7,671
Записей в блоге: 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
3376 / 2262 / 388
Регистрация: 14.08.2018
Сообщений: 7,671
Записей в блоге: 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru