【问题标题】:Triggering an event in C# using INotifyPropertyChanged使用 INotifyPropertyChanged 在 C# 中触发事件
【发布时间】:2016-05-28 00:37:16
【问题描述】:

我是 C# 新手,我正在尝试更改我的数据网格以触发我的 main 中的方法。

我上课了:

public class siteMatch : INotifyPropertyChanged
{
    public string SelectedTag
    {
        get { return _SelectedTag; }
        set
        {
            if (value != _SelectedTag)
            {
                _SelectedTag = value;
                OnPropertyChanged(_SelectedTag);
            }
        }

    }
    private string _SelectedTag;
    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, e);
    }

    protected void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }
}

我的主课上有这个:

public partial class MainWindow : Window
{
    public ObservableCollection<siteMatch> sitesMatched = new ObservableCollection<siteMatch>();

    public MainWindow()
    {
        InitializeComponent();
        sitesMatched.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(items_CollectionChanged);
    }

    static void items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        foreach (INotifyPropertyChanged item in e.OldItems)
            item.PropertyChanged -= new PropertyChangedEventHandler(item_PropertyChanged);

        foreach (INotifyPropertyChanged item in e.NewItems)
            item.PropertyChanged += new PropertyChangedEventHandler(item_PropertyChanged);
    }

    static void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        //throw new NotImplementedException();
    }
}

我在这里遗漏了什么吗?当我更改数据网格上的某些内容时,不会触发 items_CollectionChanged 方法。我有一种感觉,我没有正确订阅该活动。 OnPropertyChanged 方法被正确触发,但之后没有任何反应。

任何帮助将不胜感激。

谢谢,

编辑:我应该指出我只能访问 .Net 4

【问题讨论】:

  • 这个 OnPropertyChanged(_SelectedTag);应该是 OnPropertyChanged("_SelectedTag");
  • @Exxoff 不应该是 OnPropertyChanged("SelectedTag") 吗?由于 SelectedTag 是公共财产。 _SelectedTag 是私有数据成员。
  • @GáborBirkás 好的,但是省略引号时,他不是将属性的值发送到 OnPropertyChanged 方法而不是属性名称本身吗?
  • @GáborBirkás 我把它换了,谢谢。

标签: c# wpf events datagrid inotifypropertychanged


【解决方案1】:

据我了解,Collection Changed 仅在创建集合时触发,或者添加或删除时触发,而不是在您更改集合中的某些内容时触发。

您想要完成的事情可以通过 Datagrid 本身的事件来完成,

例如通过使用 DataGridView.CellValueChanged 事件。

另一种解决方案是扩展 ObservableCollection 类。 看看这里:https://stackoverflow.com/a/5256827/3042778

【讨论】:

  • 嘿伙计,我使用 WPF,所以我使用 DataGrid 而不是 DataGridView,而 DataGrid 没有 CellValueChanged 事件。不过感谢您的尝试。
  • 我认为您对 Collection Changed 的​​看法是正确的,是时候弄清楚如何订阅 Property Changed 事件了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多