Как написать событие для кнопки внутри списка

У меня есть один список. Внутри этого у меня есть кнопки для каждого ряда. Когда я нажимаю кнопку, страница переходит на другую страницу. Если я щелкну элементы списка, страница перейдет на другую страницу.

Теперь я не могу написать события для кнопки внутри списка.

 <Grid x:Name="ListBoxEventsUIContainer" Grid.Row="1" Margin="2,0,2,0">
            <ListBox Height="444" ItemsSource="{Binding StudentDetails,Mode=TwoWay}" HorizontalAlignment="Left" Margin="2,34,0,0" Name="listBox1" VerticalAlignment="Top" Width="476" BorderBrush="#00410D0D">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border BorderBrush="Gray" Padding="5" BorderThickness="1">
                            <StackPanel Orientation="Horizontal">
                                <Border BorderBrush="Wheat" BorderThickness="1">
                                    <Image  Name="ListPersonImage" Source="{Binding PersonImage}" Height="100" Width="100" Stretch="Uniform" Margin="10,0,0,0"/>
                                </Border>
                                <TextBlock Text="{Binding FirstName}" Name="firstName" Width="200" Foreground="White" Margin="10,10,0,0" FontWeight="SemiBold" FontSize="22"  />

                                <Button Height="80" Width="80" Command="{Binding addPerson}">
                                    <Button.Background>
                                        <ImageBrush ImageSource="/NewExample;component/Images/icon_increase.png" Stretch="Fill" />
                                    </Button.Background>
                                </Button>
                            </StackPanel>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid> 

Я хочу написать событие для:-

<Button Height="80" Width="80" Command="{Binding addPerson}">
                                        <Button.Background>
                                            <ImageBrush ImageSource="/NewExample;component/Images/icon_increase.png" Stretch="Fill" />
                                        </Button.Background>
                                    </Button>

В представлении модели. Обычно я напишу событие кнопки как:-

ReactiveAsyncCommand addPerson = new ReactiveAsyncCommand();
  public ListBoxEventsViewModel()
        {
            var getOrgDetails = new ReactiveAsyncCommand();

            getOrgDetails.Subscribe(x =>
            {
                StudentDetails = new ObservableCollection<ListBoxEventsModel>();
                StudentDetails = ListBoxEventsModel.extract(myData.ToString());

            });
            getOrgDetails.Execute(true);

            addPerson = new ReactiveAsyncCommand();
            addPerson.Subscribe(x=>{
                MessageBox.Show("Selected..");
            });
        }

Но я могу добавить кнопку Личность не работает. Пожалуйста, дайте мне знать, как написать событие? Заранее спасибо..

2 ответа

Решение

Установить DataContext на кнопку.

Xaml:

<Button DataContext="{Binding DataContext, ElementName=listBox1}"
    Height="80"
    Width="80"
    Command="{Binding addPerson}">
<Button.Background>
    <ImageBrush ImageSource="/NewExample;component/Images/icon_increase.png"
                Stretch="Fill" />
</Button.Background>

Вы можете сделать любое из следующих действий.

  1. Непосредственно записать событие "click" в шаблоне элемента, а затем получить соответствующий элемент данных, который вызвал его, следующим образом

в xaml..

<Button Height="80" Width="80" Command="{Binding addPerson}" click="addPersonClick">
                                        <Button.Background>
                                            <ImageBrush ImageSource="/NewExample;component/Images/icon_increase.png" Stretch="Fill" />
                                        </Button.Background>
                                    </Button>

В бэкэнде..

private void addPersonClick(object sender, RoutedEventArgs e)
{

  StudentsDetails object=(sender as Button).DataContext as StudentsDetails;
  //You can use this object for any of your operations
}

2 Или вы можете полностью использовать новую функцию под названием ContextMenu для реализации одной из ваших навигаций.

Другие вопросы по тегам