这是我怀疑你的代码应该看起来像一样(尽管它并不完全是你正在做什么比赛): -
public class YourClassHoldingThisStuff : INotifyProperyChanged
{
private ObservableCollection<ViewModel> _internal;
public ObservableCollection<ViewModel> BoundInternal
{
get { return _internal; }
set
{
_internal = value;
NotifyPropertyChanged("BoundInternal");
};
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new ProperytChangedEventArgs(name));
}
}
在这种情况下,_internal
场变直接输入BoundInternal
的值的来源,并且只能通过BoundInternal
(不要直接为_internal
分配值)分配它。当这种情况发生时,目前绑定的任何东西都会被告知更改。
如果由于某种原因,你真的需要保持_internal
为从BoundInternal
支持字段单独的参考,则: -
public class YourClassHoldingThisStuff : INotifyProperyChanged
{
private ObservableCollection<ViewModel> _internal;
private ObservableCollection<ViewModel> _boundInternal;
public ObservableCollection<ViewModel> BoundInternal
{
get { return _boundInternal; }
set
{
_boundInternal = value;
NotifyPropertyChanged("BoundInternal");
};
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new ProperytChangedEventArgs(name));
}
}
现在,在代码中的某个点,当你做BoundInternal = _internal
,什么必然它会被告知更改。
虽然我没有使用列表,但是我绑定了一个ItemsControl – 2010-04-11 04:34:09
是的,我的代码只是一个示例,您的ItemsControl应该有Items属性仍然 – Mark 2010-04-11 04:36:03
-1,Items属性是受保护的,所以您需要创建派生类访问它。它公开了一个没有'Refresh'方法的'IList'接口。 –
AnthonyWJones
2010-04-11 07:43:25