首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

在viewmodel中修改BindingList<T> T的一个parameter 画面没有自动刷新

2013-12-04 
求助 在viewmodel中修改BindingListT T的一个parameter画面没有自动刷新画面是一个自定义的listboxitem

求助 在viewmodel中修改BindingList<T> T的一个parameter 画面没有自动刷新
画面是一个自定义的listboxitem 包含3个textbox 在viewmodel中修改 textbox 帮顶的字段 画面没有自动刷新 ,新添一条 或者删除一条没问题,只有当修改其中的一个属性的时候,没有刷新。
而且对象集合里的值已经发生了改变, 求帮助。 wpf mvvm
[解决办法]
以下是伪代码,假设你的ItemsSource 是ObservableCollection<T>
你的T得实现INotifyPropertyChanged接口
public class T : INotifyPropertyChanged
{
  public event EventHandler<PropertyChangedEventArgs> PropertyChanged;
  private void RaisePropertyChanged(string propertyName)
  {
     if(PropertyChanged!=null)
     {
……
      }
  } 
}
[解决办法]
不知道你是不是用mvvm,在ViewModel这么做--- 假设你的ItemsSource属性名为Items

那么遍历Items中的T, 使其属性变化事件通知Items
private void OnItemChanged(object sender, PropertyChangedEventArgs e)
{
   RaisePropertyChanged("Items"); 
}

foreach(T item in Items)
{
  item.PropertyChanged += OnItemChanged; //每个实体属性变化时都去触发Items绑定更新
}
[解决办法]
textbox中的mode要绑定为TwoWay,如果是实时应用更改而不是lostFocus,绑定中再加上UpdateSourceTrigger=PropertyChanged

热点排行