如何在Windows Phone 8中通知属性更改ObservableCollection的数量?

时间:2015-06-25 07:14:21

标签: c# windows-phone-8 binding observablecollection inotifypropertychanged

我有一个ObservableCollection。我使用TextBlock的Text属性绑定了它的Count属性。当从集合中添加或删除一个或多个项目时,计数会更新。据我所知ObservableCollection同时实现INotifyPropertyChangedINotifyCollectionChanged,因此当Count属性发生更改时,我的视图应该更新。我期望与Count属性绑定的TextBlock应该显示更新的计数。但无论怎样,NotifyPropertyChange都没有为Count属性调用!

这里我如何使用Count:

绑定Text属性
<TextBlock Text="{Binding MyObservableCollection.Count}" />

有没有办法通知ObservableCollection的?属性的属性更改?

3 个答案:

答案 0 :(得分:0)

其他方式:

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

答案 1 :(得分:0)

据我所知,ObservableCollection会在添加/删除的情况下自动更新如果您为整个ObservableCollection设置新值意味着您需要提升ObservableCollection该物业的二传手。因此,如果您要设置新的收集意味着添加PropertyChangedEvent,如果您正在添加/删除意味着不需要提升属性。如果您在第二个场景中检查输出窗口中的Binding错误最有可能是将是你的问题。

答案 2 :(得分:0)

快速方法是使用CollectionChanged事件处理程序 例如:

 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));
        }
    }

}

你的XAML

 <TextBlock FontSize="30">
            <TextBlock.Inlines>
                <Run Text="CURRENT COUNT="/>
                <Run Text="{Binding Count,Mode=TwoWay}"/>
            </TextBlock.Inlines>
        </TextBlock>

然后你将得到以下结果:)

enter image description here