如何在列表框中捕获复选框的已选中和未选中事件

本文关键字:事件 复选框 列表 | 更新日期: 2024-09-22 02:52:02

我在mvvm应用程序的视图中有以下ui(xaml):

<ListBox ItemsSource="{Binding SavedDataSource}">
<ListBox.ItemTemplate>
    <DataTemplate>
   <StackPanel >  
        <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected,Mode=TwoWay}"/>
    <TextBlock   Text="{Binding DataSourceCreatedTime}"/>
  </StackPanel >  
    </DataTemplate>
</ListBox.ItemTemplate>

我将下面的源绑定到上面的视图

  private ObservableCollection<DataSource> _SavedDataSource = new ObservableCollection<DataSource>();
    public ObservableCollection<DataSource> SavedDataSource
    {
        get
        {
            ObservableCollection<DataSource> savedDataSource = new ObservableCollection<DataSource>();
            savedDataSource = DataSource.GetSaved();              
            return savedDataSource;
        }
        set
        {
            this._SavedDataSource = value;
            RaisePropertyChanged("SavedDataSource");
        }
    }

我看到的第一个问题是我的ischecked活动从未被解雇。

我有下面的财产附在上面。

    private bool _IsSelected;
    public bool IsSelected
    {
        get { return _IsSelected; }
        set { _IsSelected = value; RaisePropertyChanged("IsSelected"); }
    }

在选中和未选中事件之后,如何在列表框或集合中获取"选中"answers"未选中"项目的详细信息?

如何在列表框中捕获复选框的已选中和未选中事件

如果您希望UI更新您的后台属性,则需要在IsSelected属性上使用TwoWay模式。对于列表框选定的项,我将在绑定到数据上下文中DataSource属性的列表框选定项上使用TwoWay绑定属性。

编辑 我现在看到了问题,点击事件被复选框吃掉,并且没有冒泡到列表框的选定事件。我想出的解决办法是将选中的事件添加到复选框中,并将所选项目设置为:

    private void CheckBox_Click(object sender, RoutedEventArgs e)
    {
        ((AppViewModel)this.Resources["AppViewModel"]).SelectedDataSource = ((FrameworkElement)sender).DataContext as DataSource;
    }