首页 > 解决方案 > 在 xaml 代码中的 Listview 中绑定复选框的问题

问题描述

我有的:

我有一个带有 6 个值(字符串)和一个名称(字符串)的 ListView。我还为每一行添加了一个复选框。 在此处输入图像描述

结构:

public struct ststuff
{
    public bool bEnable { get; set; }
    public string sone  { get; set; }
    public string stwo  { get; set; }
    public string stree { get; set; }
    public string sa { get; set; }
    public string sb { get; set; }
    public string sc { get; set; }
    public string sName { get; set; }
}

收藏:

private ObservableCollection<ststuff> _astuff;

一些代码:

    <ListView Margin="10,100,10,10" Name="lvstuff" ItemsSource="{Binding astuff,Mode=TwoWay,ElementName=window}" SelectedIndex="{Binding nIndex,Mode=TwoWay,ElementName=window}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="[]">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding bEnable,ElementName=window}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding sName}"/>
                <GridViewColumn Header="a" Width="100" DisplayMemberBinding="{Binding sa}" />
                <GridViewColumn Header="b" Width="100" DisplayMemberBinding="{Binding sb}" />
                <GridViewColumn Header="c" Width="100" DisplayMemberBinding="{Binding sc}" />
                <GridViewColumn Header="1" Width="100" DisplayMemberBinding="{Binding sone}" />
                <GridViewColumn Header="2" Width="100" DisplayMemberBinding="{Binding stwo}" />
                <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding stree}" />
            </GridView>
        </ListView.View>
    </ListView>

现在我想要什么:

单击一个复选框并将真/假保存在一个值中。(例如 _astuff[0].bEnable 用于第一个复选框)

自动取款机。如果我单击一个框,所有框都会选中/取消选中,因为我将所有框都绑定到相同的值。

不知何故,我想将 Checkbox 的 IsChecked 属性绑定到我的结构的 bEnable 但我不知道如何!

标签: c#xaml

解决方案


我知道它可能不是最好的方法,但它确实有效。

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        CheckBox cb = e.OriginalSource as CheckBox;

        int index = _astuff.IndexOf((ststuff)(cb).DataContext);

        ststuff stuff= _astuff[index];

        stuff.bEnable = true;

        _astuff[index] = stuff;
    }

问题是 ListView 的选定索引不会通过选中/取消选中复选框来更改。通过这种方式,您可以在您的集合中找到索引。您必须对 Uncheck 事件执行相同的操作。


推荐阅读