循环浏览列表视图以获取复选框状态

本文关键字:获取 复选框 状态 视图 浏览 列表 循环 | 更新日期: 2023-09-27 18:30:46

  <ListView Name="listViewLoadDisableSchems" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListView.View>
            <GridView>
                <GridViewColumn  >
                    <GridViewColumn.CellTemplate >
                        <DataTemplate >
                           <DataTemplate >
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" >
                                <Label Name="lblSchemeID" VerticalAlignment="Center"  Margin="0" Content="{Binding Id}" Visibility="Hidden" />
                                <CheckBox Name="chkScheme" VerticalAlignment="Center" Margin="0,0,0,0" Content="{Binding Name}"  />
                            </StackPanel>
                        </DataTemplate>        
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

如果选中复选框,我想获取 lblSchemeID。 所以我可以更新数据库。我怎么能在屁股点击时做到这一点?

循环浏览列表视图以获取复选框状态

您需要查看一些基本的 MVVM 模式才能实现此目的。在 XAML 中尝试此操作:

<Grid>
<Grid.RowDefinitions>
    <RowDefinition Height="*"></RowDefinition>
    <RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<ListView ItemsSource="{Binding Items}">
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumn.CellTemplate >
                    <DataTemplate >
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" >
                            <CheckBox VerticalAlignment="Center" Margin="0,0,0,0" Content="{Binding Name}" IsChecked="{Binding IsSelected}"  />
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>
<Button Grid.Row="1" Content="What is checked?" Command="{Binding GoCommand}"></Button>

以及您在视图模型和代码隐藏中的等效项:

public class MainViewModel
{
    public ObservableCollection<TestItem> Items { get; set; } = new ObservableCollection<TestItem> { new TestItem() { Id = 1, Name = "Foo" }, new TestItem() { Id = 2, Name = "Bar" } };
    public ICommand GoCommand => new DelegateCommand(Go);
    void Go()
    {
        MessageBox.Show(string.Join(Environment.NewLine, Items.Where(x => x.IsSelected).Select(x => x.Name)));
    }
}
public class TestItem : INotifyPropertyChanged
{
    private bool _isSelected;
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            if (value == _isSelected) return;
            _isSelected = value;
            OnPropertyChanged();
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainViewModel();
    }
}

您可以从Google获得委托命令的实现。INotifyPropertyChanged 的同上实现,如果你为此苦苦挣扎。