Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf listview标题中的复选框未选中所有项目_C#_Wpf_Listview_Checkbox - Fatal编程技术网

C# wpf listview标题中的复选框未选中所有项目

C# wpf listview标题中的复选框未选中所有项目,c#,wpf,listview,checkbox,C#,Wpf,Listview,Checkbox,我的WPF应用程序中有一个listview,第一列是一个复选框。此复选框绑定到我的模型的IsSelected属性,并且事件传播正确发生 我在同一列的标题中也有一个复选框,我想实现一个“全选”功能,它可以检查所有listview项目 我可以附加到流程中,当我以编程方式更改模型中的数据时,可以看到数据正在更改,但它不会反映在UI中。我还实现了InotifyProperty更改 有人能解释一下我做错了什么吗 相关代码部分如下所述 Xml: Songs是一个ObservableCollection如果您

我的WPF应用程序中有一个listview,第一列是一个复选框。此复选框绑定到我的模型的IsSelected属性,并且事件传播正确发生

我在同一列的标题中也有一个复选框,我想实现一个“全选”功能,它可以检查所有listview项目

我可以附加到流程中,当我以编程方式更改模型中的数据时,可以看到数据正在更改,但它不会反映在UI中。我还实现了InotifyProperty更改

有人能解释一下我做错了什么吗

相关代码部分如下所述

Xml:


Songs是一个ObservableCollection

如果您希望在属性上激发已更改的属性,则需要在拥有该属性的类中激发事件

在您的示例中,您没有在类歌曲中触发事件

以下是正确触发事件的方式:

class Song
{
  prop IsSelected
  {
    get { return this.selected; }
    set { this.selected = value; PropertyChanged("IsSelected"); }
  }
}

旧版: 你能告诉我们InvokePropertyChanged在做什么吗

ToggleAllSelection方法来自哪里


对不起,我用这个作为答案。我还不能发表评论。

InvokePropertyChanged(“歌曲”);只是INotifyPropertyChanged接口的实现。。ToggleAllSelection()更改我的模型的IsSelected属性。包含InvokePropertyChanged的类的名称是什么?包含ToggleAllSelection的类的名称是什么?那两个班不同吗?不,他们是同一个班。。该类实现INotifyPropertyChangedI编辑了我的答案。您没有正确触发propertychanged事件。这起作用。。我现在明白了。。集合中的对象不是依赖项对象,因此不会触发更改通知事件。。谢谢
 private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            CheckBox c = sender as CheckBox;
            if (c.IsChecked.HasValue)
            {
                Model.ToggleAllSelection(c.IsChecked.Value);
            }
            else
            {
                Model.ToggleAllSelection(false);
            }
        }


 public void ToggleAllSelection(bool newState)
            {
                foreach (var item in Songs)
                {
                    item.IsSelected = newState;
                    InvokePropertyChanged("IsSelected");
                }

                InvokePropertyChanged("Songs");
            }
class Song
{
  prop IsSelected
  {
    get { return this.selected; }
    set { this.selected = value; PropertyChanged("IsSelected"); }
  }
}