C# 如何在windows phone 8中通知ObservableCollection计数的属性更改?

C# 如何在windows phone 8中通知ObservableCollection计数的属性更改?,c#,windows-phone-8,binding,observablecollection,inotifypropertychanged,C#,Windows Phone 8,Binding,Observablecollection,Inotifypropertychanged,现在,我有一个可观察的集合。我将它的Count属性与TextBlock的Text属性绑定。在集合中添加或删除一个或多个项目时,计数将更新。据我所知,ObservableCollection实现了INotifyPropertyChanged和INotifyCollectionChanged,因此当Count属性更改时,应该更新我的视图。我希望与Count属性绑定的TextBlock应该显示更新的计数。但是无论如何,NotifyPropertyChange不会为Count属性调用 下面是如何将Tex

现在,我有一个
可观察的集合
。我将它的Count属性与
TextBlock
的Text属性绑定。在集合中添加或删除一个或多个项目时,计数将更新。据我所知,
ObservableCollection
实现了
INotifyPropertyChanged
INotifyCollectionChanged
,因此当Count属性更改时,应该更新我的视图。我希望与Count属性绑定的
TextBlock
应该显示更新的计数。但是无论如何,
NotifyPropertyChange
不会为Count属性调用

下面是如何将Text属性与Count绑定:

<TextBlock Text="{Binding MyObservableCollection.Count}" />

是否有任何方法可以通知
ObservableCollection的Count属性的属性更改

其他方法:

在MyObservableCollection中添加或删除项目时,您可以向视图模型添加计数,更新计数手册,并调用NotifyPropertyChange。

其他方式:


您可以向视图模型添加计数,当您从MyObservableCollection中添加或删除项时,更新计数手册,并调用NotifyPropertyChange。

据我所知,如果为整个
ObservableCollection
设置了新值,则在添加/删除的情况下,
ObservableCollection
将自动更新。这意味着您需要在属性的setter中提高
ObservableCollection
。因此,如果您正在设置新集合,则意味着添加
PropertyChangedEvent
,如果您正在执行添加/删除操作,则不需要提高属性。如果您处于第二种情况,请检查输出窗口中的绑定错误,这很可能是您的问题。

据我所知,
ObservableCollection
将自动更新在添加/删除的情况下,如果为整个
ObservableCollection
设置了新值,则意味着您需要在属性的setter中提升
ObservableCollection
。因此,如果您正在设置新集合,则意味着添加
PropertyChangedEvent
,如果您正在执行添加/删除操作,则不需要提升属性。如果您处于第二种情况,则检查输出窗口中的绑定错误,这很可能是您的问题。

一种快速方法是使用CollectionChanged eventhandler 例如:

 public class ViewModelExample : INotifyPropertyChanged
 {

    public event PropertyChangedEventHandler PropertyChanged;
    private int _count;
    public int Count
    {
        get
        {
            return _count;
        }
        set
        {
            _count = value;
            RaisePropertyChanged("Count");
        }
    }

    private ObservableCollection<String> _myObservableCollection;
    public ObservableCollection<String> MyObservableCollection
    {
        get
        {
            return _myObservableCollection;
        }
        set
        {
            _myObservableCollection = value;
            RaisePropertyChanged("MyObservableCollection");
        }
    }

    public ViewModelExample()
    {
        this.MyObservableCollection = new ObservableCollection<String>();
        this.MyObservableCollection.CollectionChanged += this.OnCollectionChanged;
        this.Count = MyObservableCollection.Count;
        for(int j=0;j<20;j++)
        {
            this.MyObservableCollection.Add("SOMETHING HERE");
        }
    }

    private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if(e.NewItems!=null)
        {
           this.Count+=e.NewItems.Count;
        }
    }

    private void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}
公共类ViewModelExample:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私人国际单位计数;
公共整数计数
{
得到
{
返回计数;
}
设置
{
_计数=数值;
RaisePropertyChanged(“计数”);
}
}
私人可观测集合(myObservableCollection);;
公共可观测集合MyObservableCollection
{
得到
{
return\u myobservatablecollection;
}
设置
{
_myObservableCollection=值;
RaisePropertyChanged(“MyObservableCollection”);
}
}
公共ViewModelExample()
{
this.MyObservableCollection=新的ObservableCollection();
this.MyObservableCollection.CollectionChanged+=this.OnCollectionChanged;
this.Count=MyObservableCollection.Count;

对于(int j=0;j来说,一个快速的方法是使用CollectionChanged eventhandler 例如:

 public class ViewModelExample : INotifyPropertyChanged
 {

    public event PropertyChangedEventHandler PropertyChanged;
    private int _count;
    public int Count
    {
        get
        {
            return _count;
        }
        set
        {
            _count = value;
            RaisePropertyChanged("Count");
        }
    }

    private ObservableCollection<String> _myObservableCollection;
    public ObservableCollection<String> MyObservableCollection
    {
        get
        {
            return _myObservableCollection;
        }
        set
        {
            _myObservableCollection = value;
            RaisePropertyChanged("MyObservableCollection");
        }
    }

    public ViewModelExample()
    {
        this.MyObservableCollection = new ObservableCollection<String>();
        this.MyObservableCollection.CollectionChanged += this.OnCollectionChanged;
        this.Count = MyObservableCollection.Count;
        for(int j=0;j<20;j++)
        {
            this.MyObservableCollection.Add("SOMETHING HERE");
        }
    }

    private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if(e.NewItems!=null)
        {
           this.Count+=e.NewItems.Count;
        }
    }

    private void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}
公共类ViewModelExample:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
私人国际单位计数;
公共整数计数
{
得到
{
返回计数;
}
设置
{
_计数=数值;
RaisePropertyChanged(“计数”);
}
}
私人可观测集合(myObservableCollection);;
公共可观测集合MyObservableCollection
{
得到
{
return\u myobservatablecollection;
}
设置
{
_myObservableCollection=值;
RaisePropertyChanged(“MyObservableCollection”);
}
}
公共ViewModelExample()
{
this.MyObservableCollection=新的ObservableCollection();
this.MyObservableCollection.CollectionChanged+=this.OnCollectionChanged;
this.Count=MyObservableCollection.Count;

for(int j=0;jI无法重现此问题。请检查您的属性和Datacontext。我无法重现此问题。请检查您的属性和Datacontext。