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