Как сделать 2 колонки в listbox через mvvm на Avalonia
Мне нужно вывести два списка List в две колонки ListBox, но так что-бы это была одна строка, через патерн MVVM. Я уже пол интернета облазил но так и не нашёл ничего. Я только учусь возможно из-за этого что-то пропустил, если у кого-то есть возможность обяснить, или хотя б пример какой-то, был бы очень рад.
ViewModel:
private List<string> _artists = new();
private List<string> _names = new();
private List<Song> _songs = new();
public List<string> Artists
{
get
{
return _artists;
}
set { _artists = value; OnProopertyChanged(); }
}
public List<string> Names
{
get
{
return _names;
}
set { _names = value; OnProopertyChanged(); }
}
public List<Song> Songs
{
get
{
return _songs;
}
set { _songs = value; OnProopertyChanged(); }
}
for (int counterForList = 1; counterForList < 41; counterForList++)
{
HtmlMethod(counterForList,2, out Artist);
HtmlMethod(counterForList,3, out Name);
Song song = new Song(Name, Artist);
Songs.Add(song);
}
foreach (var song in Songs)
{
Artists.Add(song.Artist);
Names.Add(song.Name);
}
Model:
public class Song
{
public string Name { get; set; }
public string Artist { get; set; }
и сам MainWindow:
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:AvaloniaApplication1.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="350"
x:Class="AvaloniaApplication1.Views.MainWindow"
Icon="/Assets/avalonia-logo.ico"
Title="AvaloniaApplication1"
Width="600"
Height="350">
<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1"/>
<ListBox Items="{Binding Songs}" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3" Grid.RowSpan="2">
<ListBox.ItemTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Вот есть код, я не понимаю как вывести Artists и Names в разные колонки, или может Song можно поделить. В документалке по avalonia написано что уних нету ItemSource у них только Item.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Очень просто, вы почти всё сделали
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Margin="5" Text="{Binding Name}"/>
<TextBlock Margin="5" Grid.Column="1" Text="{Binding Artist}"/>
</Grid>
</DataTemplate>
<ListBox.ItemTemplate>
Либо еще так можно
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5" Text="{Binding Name}"/>
<TextBlock Margin="5 0" Text="-"/>
<TextBlock Margin="5" Text="{Binding Artist}"/>
</StackPanel>
</DataTemplate>
<ListBox.ItemTemplate>