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# 可观察到的采集,在属性上已更改而未触发_C#_Wpf_Observablecollection - Fatal编程技术网

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
交互。