C# 可观察到的采集,在属性上已更改而未触发
我是初学者,我试着到处寻找类似的问题,这个问题被问了很多次,但我找不到任何解决方案 我实现了C# 可观察到的采集,在属性上已更改而未触发,c#,wpf,observablecollection,C#,Wpf,Observablecollection,我是初学者,我试着到处寻找类似的问题,这个问题被问了很多次,但我找不到任何解决方案 我实现了INotifyPropertyChanged如下(它工作正常): 我的observedcollection如下所示: ObservableCollection<bool> Test = new ObservableCollection<bool>(new[] { false, false, false, false, false, false }); priva
INotifyPropertyChanged
如下(它工作正常):
我的observedcollection
如下所示:
ObservableCollection<bool> Test = new ObservableCollection<bool>(new[] { false, false, false, false, false, false });
private ObservableCollection<bool> _Collection;
public ObservableCollection<bool> Collection
{
get { return _Collection = Test; }
set { _Collection = value; OnPropertyChanged("Collection"); }
}
数据在使用时已正确更改,但如果我以其他方式设置集合,
OnPropertyChanged
不会触发,因此我的切换按钮不会更新
无法找出原因…更改收藏中的某个项目后,您没有更改收藏。因此,您没有调用集合的setter。要更新Ui上的项目,集合中的项目必须实现INotifyPropertyChanged,如所述 解决方案可以是这样的:
ObservableCollection<ClassA> Test { get; set; }
private ObservableCollection<bool> _Collection
= new ObservableCollection<bool>(new[] { false, false, false, false, false, false });
public ObservableCollection<bool> Collection
{
get { return _Collection; }
set { _Collection = value; OnPropertyChanged("Collection"); }
}
更改收藏中的某个项目时,您不会更改收藏。因此,您没有调用集合的setter。要更新Ui上的项目,集合中的项目必须实现INotifyPropertyChanged,如所述 解决方案可以是这样的:
ObservableCollection<ClassA> Test { get; set; }
private ObservableCollection<bool> _Collection
= new ObservableCollection<bool>(new[] { false, false, false, false, false, false });
public ObservableCollection<bool> Collection
{
get { return _Collection; }
set { _Collection = value; OnPropertyChanged("Collection"); }
}
你不能打电话
return _Collection = Test;
在集合
属性的getter中,因为这会使setter(以及整个INotifyPropertyChanged实现)变得无用。传递给setter的值
从未在任何地方使用
当需要使用预定义集合初始化属性时,可以按如下方式执行:
ObservableCollection<ClassA> Test { get; set; }
private ObservableCollection<bool> _Collection
= new ObservableCollection<bool>(new[] { false, false, false, false, false, false });
public ObservableCollection<bool> Collection
{
get { return _Collection; }
set { _Collection = value; OnPropertyChanged("Collection"); }
}
私有ObservableCollection\u集合
=新的ObservableCollection(新[]{false,false,false,false,false});
公开收集
{
获取{return\u Collection;}
设置{u Collection=value;OnPropertyChanged(“Collection”);}
}
您不能打电话
return _Collection = Test;
在集合
属性的getter中,因为这会使setter(以及整个INotifyPropertyChanged实现)变得无用。传递给setter的值
从未在任何地方使用
当需要使用预定义集合初始化属性时,可以按如下方式执行:
ObservableCollection<ClassA> Test { get; set; }
private ObservableCollection<bool> _Collection
= new ObservableCollection<bool>(new[] { false, false, false, false, false, false });
public ObservableCollection<bool> Collection
{
get { return _Collection; }
set { _Collection = value; OnPropertyChanged("Collection"); }
}
私有ObservableCollection\u集合
=新的ObservableCollection(新[]{false,false,false,false,false});
公开收集
{
获取{return\u Collection;}
设置{u Collection=value;OnPropertyChanged(“Collection”);}
}
你如何在XAML中使用集合
?嗨,迈克,我编辑了我的帖子。ThanksBinding DataContext.Collection[1]是您的问题,您绑定到集合的第一个元素bool。是,因为此VidFlipX属性属于一个已使用6次的usercontrol。他们每个人都在使用相同的可观察集合。上面发布的XAML来自第二个用户控件。属性设置器(因此也是INotifyPropertyChanged实现)是无用的。您如何在XAML中使用Collection
。ThanksBinding DataContext.Collection[1]是您的问题,您绑定到集合的第一个元素bool。是,因为此VidFlipX属性属于一个已使用6次的usercontrol。他们每个人都在使用相同的可观察集合。上面发布的XAML来自第二个用户控件。属性设置器(因此也是INotifyPropertyChanged实现)是无用的。抱歉,我看不出与我所写的有什么区别。抱歉,我看不出与我所写的有什么区别。我只是尝试了一下。ObservableCollection中的项已修改,但OnPropertyChanged未触发。集合中的OnPropertyChanged
只有在调用setter时才会调用setter,即在属性上进行赋值时(如集合=…
)。添加或删除项时,ObservableCollection将触发CollectionChanged事件。修改集合元素时,它们应该触发自己的PropertyChanged事件,如Fruchtzwerg给出的答案所示。@lecloneur请参阅@Fruchtzwerg's我想您可能误解了INotifyPropertyChanged
如何与ObservableCollection
交互。我刚刚尝试过。ObservableCollection中的项已修改,但OnPropertyChanged未触发。集合中的OnPropertyChanged
只有在调用setter时才会调用setter,即在属性上进行赋值时(如集合=…
)。添加或删除项时,ObservableCollection将触发CollectionChanged事件。修改集合元素时,它们应该触发自己的PropertyChanged事件,如Fruchtzwerg给出的答案所示。@LeCloner请参阅@Fruchtzwerg's我想您可能误解了INotifyPropertyChanged
如何与ObservableCollection
交互。