【问题标题】:How to update a List when binded to a ListView绑定到 ListView 时如何更新列表
【发布时间】:2014-10-16 05:57:47
【问题描述】:

我有一个 ListView,它将每个列表视图项绑定到具有 List 的 A 类

<Page
  DataContext="{Binding MainViewModel , Source={StaticResource Locator}}"
>
<ListView ItemsSource="{Binding A.List}" >
     <ListView.ItemTemplate>
          ....
     </ListView.ItemTemplate>
</ListView>
</Page>            

在我的 ViewModel 中,我有类“A”,它有一个属性 List

 public class MainViewModel : ViewModelBase {

     private A _a;
     public A A {
        get {
        return _a;
        }
     }
 }

 public class A 
    {   
        private IList<IList> _lists;
        IList<int> List { 
            get {
               return _lists;
            }; 
            set {
               _lists = value;
               RaisePropertyChanged("List"); 
            }
    }  

在 set() 方法中,每当设置 List 时,我都会调用“RaisePropertyChanged()”。 但是当我运行它时,ListView 内容没有得到更新。 我应该提高 RaisePropertyChanged("List") 还是 RaisePropertyChanged("A.List") (就像我在 xaml 中放入 {Binding A.List] 的内容一样?就我而言,我将 List 设置为 List 的另一个实例。

【问题讨论】:

  • 您是否为此实现了 INotifyPropertychanged 以在绑定列表更新时更新您的列表视图?
  • MainViewModel 从 MVVM 轻框架继承 ViewModelBase
  • 你是对的,但根据我的说法,你的 A 类应该继承自 INotifyPropertyChanged 以实现 ListView 上的更新功能。
  • 该属性 A 看起来不太正确。似乎缺少一个 Get 语句。

标签: c# windows-phone-8


【解决方案1】:

试试这个看看是否有效。

public class A : INotifyPropertyChanged
    {   
        private IList<int> _lists;
        IList<int> List { 
            get {
               return _lists;
            }; 
            set {
               _lists = value;
               OnPropertyChanged("List");
            }
          }

 public event PropertyChangedEventHandler PropertyChanged;

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

【讨论】:

  • 你不应该使用 ObservableCollection 而不是 IList 吗?
  • @failedprogramming 看来他是想改变ListBox的来源,而不是向集合中添加或改变数据。所以我认为Observable Collection是帮不上忙的。
  • 我使用的是 MVVM light,所以我应该用 ObservableObject 继承 A。并且 set() 方法应该是 Set("List", ref _lists, value);对吧?
  • @hap497 你没有设置 {Binding A.List} 吗?那么它不是关于 A,而是关于 List 属性。如果您愿意,可以将 IList 替换为 Observable List{...} 进行测试,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
相关资源
最近更新 更多