【问题标题】:c# ListView not updating when Property Changedc#当属性改变时ListView不更新
【发布时间】:2015-02-07 22:32:48
【问题描述】:

当更多数据添加到 ObservableCollection 时,我的 UI 没有更新。控制台输出显示“System.NullReferenceException”类型的第一次机会异常发生。我应该改用 Inotifycollectionchanged 吗?以下是部分代码:

<ListView x:Name="ListView2" ItemsSource="{Binding Source={x:Static d:GrabUserConversationModel._Conversation}, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="ListView1_SelectionChanged">

UserConversationModel.cs

public class UserConversationModel : INotifyPropertyChanged
{
    public UserConversationModel()
    {
    }

    public string Name
    { get; set; }



    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string Obj)
    {
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(Obj));
        }
    }
}

MainWindow.xaml.cs

public partial class MainWindow 
{

    static GrabUserConversationModel grabUserConversationModel;


    public MainWindow()
    {
        InitializeComponent();
        ...

    }

  static void AddData()
    {
   grabUserConversationModel.Conversation.Add(new UserConversationModel { Name = "TestName" });

    }

GrabUserConversationModel.cs

class GrabUserConversationModel
{

    public static ObservableCollection<UserConversationModel> _Conversation = new ObservableCollection<UserConversationModel>();


    public ObservableCollection<UserConversationModel> Conversation
    {
        get { return _Conversation; }
        set { _Conversation = value; }
    }
     ...

【问题讨论】:

  • 尝试删除绑定上的UpdateSourceTrigger。让 WPF 在默认情况下像通常一样挂钩集合并捕获集合更改。

标签: c# wpf listview inotifypropertychanged


【解决方案1】:

您的财产ObservableCollection&lt;UserConversationModel&gt; Conversation 没有实现INotifyPropertyChanged

public ObservableCollection<UserConversationModel> Conversation
{
    get { return _Conversation; }
    set { _Conversation = value; OnPropertyChanged("Conversation");}
}

【讨论】:

  • ObservableCollection&lt;T&gt; 确实实现了INotifyPropertyChanged
  • 显然我的意思是使用它的方法 OnPropertyChanged :)
  • 这个解决方案目前存在的问题是,如果您查看他的绑定,他并没有绑定到该属性,而是绑定到静态字段。
  • 在更一般的范围内,问题不适用于 MVVM 模式:)
  • 关于该绑定...我认为该属性的名称是错误的(您绑定到该字段而不是该属性)
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2020-02-11
相关资源
最近更新 更多