我有一个xaml文件,其中定义了一个列表视图。对应的xaml.cs文件,我有两个方法CheckBox_Checked和CheckBox_UnChecked。复选框只是行中的另一列。我的问题是,我如何将列表视图行作为CheckBox_Checked方法中的参数传递?目的是知道哪一行被选中。问题是可以选中多个复选框,所以,我需要确切地知道哪个复选框被选中。ListView作为绑定到列表的自定义类每个gridviewcolumn都是自定义类中的变量
xdnvmnnf1#
您可以将sender参数的DataContext转换为事件行程常式中的数据型别:
sender
DataContext
private void CheckBox_Checked(object sender, RoutedEventArgs e) { CheckBox checkBox = (CheckBox)sender; YourCustomClass dataObject = checkBox.DataContext as YourCustomClass; if (dataObject != null) { //access the xxx and yyy properties of YourCustomClass here... } }
pkmbmrz72#
我将简单地解释如何在代码隐藏中判断选中了哪个复选框。XAML语言
<ListView x:Name="ListView02" Grid.Column="1"> <ListView.View> <GridView> <GridViewColumn Header="Check"> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox Checked="CheckBox_Checked" IsChecked="{Binding IsChecked, Mode=TwoWay}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" /> <GridViewColumn DisplayMemberBinding="{Binding Type}" Header="Type" /> <GridViewColumn Header="Image"> <GridViewColumn.CellTemplate> <DataTemplate> <Border Background="Gray"> <Image Width="32" Height="32" Source="{Binding ImagePath}" /> </Border> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
编码
public partial class ListView1 : Window { private List<Animal> _list; public ListView1() { InitializeComponent(); _list = new List<Animal> { new Animal { IsChecked=true, Name = "Cat", Type = "animal", ImagePath = @"Images\cat.png"}, new Animal { IsChecked=false, Name = "Dog", Type = "animal", ImagePath = @"Images\dog.png"}, new Animal { IsChecked=true, Name = "Fish", Type = "fish", ImagePath = @"Images\fish.png"}, new Animal { IsChecked=false, Name = "Flower", Type = "plant", ImagePath = @"Images\flower.jpg"}, }; } private void Window_Loaded(object sender, RoutedEventArgs e) { ListView01.ItemsSource = _list; ListView02.ItemsSource = _list; ListBox.ItemsSource = _list; DataGrid.ItemsSource = _list; } private void CheckBox_Checked(object sender, RoutedEventArgs e) { //You can check the data in this part. var data = ((CheckBox)sender).DataContext as Animal; if(data == null) { return; } Debug.WriteLine($"{data.Name} {data.Type} {data.ImagePath}"); } }
2条答案
按热度按时间xdnvmnnf1#
您可以将
sender
参数的DataContext
转换为事件行程常式中的数据型别:pkmbmrz72#
我将简单地解释如何在代码隐藏中判断选中了哪个复选框。
XAML语言
编码