Добавление кнопки в конце списка
Ситуация следующая - изучаю WPF MVVM, но никак не могу найти ответ на казалось бы банальный вопрос. У меня есть listbox который привязан к VM, в конце каждой строки есть кнопку при нажатии на которую убавляется число. Но проблема в том, что если не выбрать ячейку, то выйдет ошибка. Я не понимаю как мне подвязать Selected к кнопку.
Фрагмент кода xaml:
<ListBox ItemsSource="{Binding Events}" x:Name="MylistBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="250"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Source="{Binding Img}" Grid.Column="0"></Image>
<StackPanel Grid.Column="1" >
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Location}"/>
<TextBlock Text="{Binding Ganre}"/>
<TextBlock Text="{Binding Date_Time}"/>
<TextBlock Text="{Binding Tikets, StringFormat='Осталось билетов {0}'}"/>
</StackPanel>
<Button Grid.Column="3" Command="{Binding DataContext.AddCommand_Buy, Mode=OneWay, ElementName=MylistBox}" CommandParameter="{Binding ElementName=MylistBox, Path=SelectedItem}">Купить</Button>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Кусок кода VM
public class ApplicationViewModel : INotifyPropertyChanged
{
private Event selectedEvent;
public ObservableCollection<Bug> Bugs { get; set; }
public ObservableCollection<Event> Events { get; set; }
private RelayCommand addCommand_Buy;
public RelayCommand AddCommand_Buy
{
get
{
return addCommand_Buy ??
(addCommand_Buy = new RelayCommand(obj =>
{
try
{
if (selectedEvent.Tikets == 0)
{
MessageBox.Show("Билетов больше нет!");
}
else
{
selectedEvent.Tikets -= 1;
try
{
Bug findbugs = Bugs.Where(item => item.Name == selectedEvent.Name).FirstOrDefault();
if (findbugs == null)
{
Bugs.Insert(0, new Bug { Date_Time = selectedEvent.Date_Time, Name = selectedEvent.Name, Tikets_all = 1, Price = selectedEvent.Price });
}
else
{
findbugs.Tikets_all += 1;
findbugs.Price = findbugs.Tikets_all * selectedEvent.Price;
}
}
catch
{
Bugs.Add(new Bug { Date_Time = selectedEvent.Date_Time, Name = selectedEvent.Name, Tikets_all = 1, Price = selectedEvent.Price });
}
}
}
catch
{
MessageBox.Show("Вы не выбрали мероприятие! Необходимо сначала нажать на нужное мероприятие и потом на кнопку купить!");
}
}));
}
}
private RelayCommand addOpen_Bug;
public RelayCommand AddOpen_Bug
{
get
{
return addOpen_Bug ??
(addOpen_Bug = new RelayCommand(obj =>
{
var window = Application.Current.Windows;
window[1].Show();
}));
}
}
public Event SelectedEvent
{
get { return selectedEvent; }
set
{
selectedEvent = value;
OnPropertyChanged("SelectedEvent");
}
}
public ApplicationViewModel()
{
Bugs = new ObservableCollection<Bug>();
Events = new ObservableCollection<Event>
{
new Event {Event_name = "Концерт",
Name = "Co",
Title = "Говорят, если вы не были на «Чиже» — вы не слышали русский рок! Интеллигентные, хулиганские и романтичные песни, которые мы любим уже ни один десяток лет, в живом исполнении. Однажды Сергей Чиграков сказал: «И если суждено оставить хоть какой-то след в истории, надеюсь, он будет связан с моей музыкальной деятельностью. Пусть меня запомнят не по сборникам стихов и даже не по фонограммам, а по живым выступлениям». И это действительно так. Концерты коллектива — это встречи добрых друзей, по которым скучаешь и c нетерпением ждешь.",
Ganre = "Рок",
Date_Time="10 апреля 2023 | 10:00",
Location = "ДК железнодорожников",
Tikets=10,
Price=500,
Img = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../Resources/Image/Концерт.jpg")
},
new Event {Event_name = "Концерт",
Name = "Чиж & Co",
Title = "Говорят, если вы не были на «Чиже» — вы не слышали русский рок! Интеллигентные, хулиганские и романтичные песни, которые мы любим уже ни один десяток лет, в живом исполнении. Однажды Сергей Чиграков сказал: «И если суждено оставить хоть какой-то след в истории, надеюсь, он будет связан с моей музыкальной деятельностью. Пусть меня запомнят не по сборникам стихов и даже не по фонограммам, а по живым выступлениям». И это действительно так. Концерты коллектива — это встречи добрых друзей, по которым скучаешь и c нетерпением ждешь.",
Ganre = "Рок",
Date_Time="10 апреля 2023 | 10:10",
Location = "ДК железнодорожников",
Tikets=10,
Price=500,
Img = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../Resources/Image/Концерт.jpg")
},
};
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
Уже несколько дней сижу и ответ найти не могу. Помогите пожалуйста.