Как написать событие для кнопки внутри списка
У меня есть один список. Внутри этого у меня есть кнопки для каждого ряда. Когда я нажимаю кнопку, страница переходит на другую страницу. Если я щелкну элементы списка, страница перейдет на другую страницу.
Теперь я не могу написать события для кнопки внутри списка.
<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>
Вы можете сделать любое из следующих действий.
- Непосредственно записать событие "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 для реализации одной из ваших навигаций.