我有一个ObservableCollection
。我使用TextBlock
的Text属性绑定了它的Count属性。当从集合中添加或删除一个或多个项目时,计数会更新。据我所知ObservableCollection
同时实现INotifyPropertyChanged
和INotifyCollectionChanged
,因此当Count属性发生更改时,我的视图应该更新。我期望与Count属性绑定的TextBlock
应该显示更新的计数。但无论怎样,NotifyPropertyChange
都没有为Count属性调用!
这里我如何使用Count:
绑定Text属性<TextBlock Text="{Binding MyObservableCollection.Count}" />
有没有办法通知ObservableCollection
的?属性的属性更改?
答案 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>
然后你将得到以下结果:)