Есть Listbox, которому привязана коллекция, которая в свою очередь берёт данные из БД. Проблема в том что у меня не выходит вывести все данные определенного ListBoxItem из ViewModel. Знаю что для этого необходимо использовать ICommand, но пока не дошло как это сделать.
Вот код Xaml:
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,15,30,0">
<Border BorderBrush="#242424" BorderThickness="0,0,0,1" >
<Grid Margin="0,0,0,10" Width="370">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="45"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="45"/>
</Grid.ColumnDefinitions>
<Button Background="{x:Null}" BorderThickness="0">
<Image Source="\Resources\img\sys\play.png" Width="25" Height="25"/>
</Button>
<Image Source="{Binding Image}" HorizontalAlignment="Left" Grid.Column="1" Width="35" Height="35">
<Image.Clip>
<RectangleGeometry RadiusX="3" RadiusY="3" Rect="0,0,35,35"/>
</Image.Clip>
</Image>
<TextBlock Grid.Column="2" Text="{Binding Musician}" Margin="0,0,10,0" Foreground="#fff" FontSize="16" VerticalAlignment="Center" FontFamily="\Resources\fonts\Montserrat-Regular.ttf #Montserrat"/>
<TextBlock Grid.Column="3" Text="{Binding Song}" Foreground="#837979" FontSize="14" VerticalAlignment="Center" FontFamily="\Resources\fonts\Montserrat-Regular.ttf #Montserrat"/>
<TextBlock Grid.Column="4" Text="3:23" Foreground="#fff" FontSize="14" VerticalAlignment="Center" FontFamily="\Resources\fonts\Montserrat-Regular.ttf #Montserrat"/>
</Grid>
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Не судите строго на счёт xaml, позже исправлю.
Здесь сама ViewModel:
using (SqlCommand command1 = new SqlCommand(call_album_all, connection))
{
int id_album = 2;
connection.Open();
command1.Parameters.AddWithValue("@id_album", id_album);
SqlDataReader reader = command1.ExecuteReader();
songs = new ObservableCollection<Models.Songs>();
if (reader.HasRows)
{
while (reader.Read())
{
songs.Add(new Models.Songs
{
ID = reader.GetInt32(0),
Image = byteArrayToImage((byte[])reader.GetValue(1)),
Musician = reader.GetString(2),
Album = reader.GetString(3),
Song = reader.GetString(4),
String_Song = reader.GetString(5),
Video = reader.GetString(6),
String_Video = reader.GetString(7)
});
}
}
}
Вот то что на скриншоте это и есть та самая 2-ка из ViewModel, а мне как выше писал нужно чтобы инфа была только своя

Здесь сама ViewModel:, там код, где вы соединяетесь с базой (= new SqlCommand...), выполняете команду (command1.ExecuteReader();), далее заполняете коллекцию моделей (new ObservableCollection<Models.Songs>();) данными, и тут собственнов вопрос, почему это в ViewModel слое? В слое, который отвечает за обработку UI команд, за привязку и так далее, но не за данные... – EvgeniyZ Apr 11 '21 at 16:13View- интерфейс (то, что видит пользователь), всякие кнопочки.Model- данные (работа с базой, чтение файла, отправка HTTP запросов, может быть датчик какой-либо погодный или что-либо еще), то есть это слой, который имеет логику по работе с определенным источником, он имеет органы управления, которые дают наружу данные, ну либо он, наоборот, принимает данные для изменений их в "базе".ViewModel- это связующий слой, который берет запрос с UI, обрабатывает его, спрашивает у M слоя нужные данные, преобразует их в нужный вид для привязки и отдает публичные свойства. – EvgeniyZ Apr 11 '21 at 16:17Get(),Update(),Delete(), то есть он отвечает только за работу с базой, а наружу у него удобные методы управления. Далее VM слой инициализирует эту модель и по действию в UI (команда или что либо еще), дергает те самые методы модели, получая нужные данные. Так, как для UI зачастую требуются не все данные для отображения (например внутренний какой либо код, ссылка, id или еще что), а также еще и может появится своя логика (например "IsSelected"), то – EvgeniyZ Apr 11 '21 at 16:33Есть какие-нибудь статьи- посоветовать что-либо не могу, это такая тема, которую надо долго мучать, чтоб познание пришло само)что вам необходимо знать- я не понимаю, что вы хотите и в чем ваша проблема. Сейчас я вам просто говорю про то, что у вас не совсем верный MVVM, не более. – EvgeniyZ Apr 11 '21 at 16:36Пример- ну самое базовое я описывал здесь, заметьте, что данные про студентов там в отдельном классе (некая имитация базы со своими методами). По поводу вопроса, в чем сейчас тогда проблема не пойму? Ок, я так понимаю "альбомы" у вас в виде списка, то естьListBox, если да, то просто привяжитеSelectedItemк VM свойству и в егоSetукажите логику подгрузки новых данных из базы. – EvgeniyZ Apr 11 '21 at 16:46ItemsSource- это источник данных, те данные, от куда контрол пытается отобразить данные. АSelectedItem- это текущий выбранный объект. И если я правильно понял, вам надо по клику на объект вListBoxначать подгружать данные из базы, чтоб их вывести. Ну вот, по клику (выбору) объекта, у вас изменится привязанныйSelectedItem, по которому вызывайте нужную логику обновления, которая загрузит новые данные и отобразит их. Если в тот жеListBox, то у вас уже привязана коллекция должна быть, просто очищайте ее и циклом добавяйте новое, ну или=new... (), только про INPC не забудьте. – EvgeniyZ Apr 11 '21 at 16:53