如何识别单击的按钮属于哪个列表框项目
本文关键字:属于 列表 项目 按钮 何识别 识别 单击 | 更新日期: 2023-09-27 18:27:12
在WPF编程中,我在编写按钮单击事件处理程序时遇到问题。因为按钮在列表框项目(数据模板的一部分)中,当点击按钮时,我无法判断它属于哪个项目。有解决方案吗?SOS-
似乎已经将列表框绑定到集合,并且按钮是数据模板或项目模板的一部分
您可以将按钮的Tag
属性绑定到您的数据对象:
<DataTemplate DataType="{x:Type c:Person}">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock>Name:</TextBlock>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
<Button Click="Button_Click" Tag="{Binding Path=.}">Click me!</Button>
</StackPanel>
</DataTemplate>
点击事件:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
Person p = (Person)b.Tag;
MessageBox.Show(p.Name);
}
但是,正如其他人建议的那样,您可以使用Button的DataContext
属性。在我的示例中,它已经指向Person
对象。
我认为通过使用Tag
属性,您可以更好地控制事件处理程序中要访问的内容。
做任何事情都有很多方法!选择最适合你的。
您可以从DataContext
获取该信息。
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
Persons = new ObservableCollection<Person>() {
new Person() { Name = "John", Age = 30 },
new Person() { Name = "Tim", Age = 48 }
};
lbPersons.DataContext = Persons;
private void person_Clicked(object sender, RoutedEventArgs e) {
Button cmd = (Button)sender;
if (cmd.DataContext is Person) {
Person p = (Person)cmd.DataContext;
}
}
在XAML中:
<Window.Resources>
<DataTemplate x:Key="UserTemplate" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=Name}" Width="50"/>
<TextBlock Text="{Binding Path=Age}" Width="20"/>
<Button Content="Click" Click="person_Clicked"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox IsSynchronizedWithCurrentItem="True" Name="lbPersons" ItemsSource="{Binding}" ItemTemplate="{StaticResource UserTemplate}" />
</Grid>
ListBox.selectedItem和ListBox。SelectedIndex将作为单击按钮的一部分进行设置。
假设列表框中的项目为MyListBoxItem 类型
void SomeButtonClick(Object sender, EventArgs e)
{
ListBox lb = sender as ListBox
if (lb != null)
{
MyListBoxItem item = lb.SelectedItem As MyListBoxItem;
if (item != Null)
{
item.MethodRelatedToButton(); // maybe
}
}
}
按要求放大