如何在wpf c#中获取listview项并将其传递给方法

xam8gpfp  于 2022-11-18  发布在  C#
关注(0)|答案(2)|浏览(242)

我有一个xaml文件,其中定义了一个列表视图。对应的xaml.cs文件,我有两个方法CheckBox_Checked和CheckBox_UnChecked。复选框只是行中的另一列。我的问题是,我如何将列表视图行作为CheckBox_Checked方法中的参数传递?
目的是知道哪一行被选中。问题是可以选中多个复选框,所以,我需要确切地知道哪个复选框被选中。
ListView作为绑定到列表的自定义类
每个gridviewcolumn都是自定义类

中的变量

xdnvmnnf

xdnvmnnf1#

您可以将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...
    }
}
pkmbmrz7

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}");
    }
}

相关问题