为了账号安全,请及时绑定邮箱和手机立即绑定

项目更改时通知ObservableCollection

项目更改时通知ObservableCollection

C#
互换的青春 2019-09-21 14:32:01
通知Observablecollection某项已更改的某些技术。该链接中的TrulyObservableCollection似乎是我正在寻找的东西。public class TrulyObservableCollection<T> : ObservableCollection<T>where T : INotifyPropertyChanged{    public TrulyObservableCollection()    : base()    {        CollectionChanged += new NotifyCollectionChangedEventHandler(TrulyObservableCollection_CollectionChanged);    }    void TrulyObservableCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)    {        if (e.NewItems != null)        {            foreach (Object item in e.NewItems)            {                (item as INotifyPropertyChanged).PropertyChanged += new PropertyChangedEventHandler(item_PropertyChanged);            }        }        if (e.OldItems != null)        {            foreach (Object item in e.OldItems)            {                (item as INotifyPropertyChanged).PropertyChanged -= new PropertyChangedEventHandler(item_PropertyChanged);            }        }    }    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)    {        NotifyCollectionChangedEventArgs a = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);        OnCollectionChanged(a);    }}但是,当我尝试使用它时,我没有收到关于集合的通知。我不确定如何在我的C#代码中正确实现这一点:XAML:    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding MyItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">        <DataGrid.Columns>            <DataGridCheckBoxColumn Binding="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>        </DataGrid.Columns>    </DataGrid>当我运行程序时,与属性初始化一样,我有3个复选框为false,true,false。但是,当我更改ckeckbox之一的状态时,该程序将通过item_PropertyChanged,但永远不会在MyItemsSource属性代码中进行。
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我通过使用静态动作解决了这种情况


public class CatalogoModel 

{

    private String _Id;

    private String _Descripcion;

    private Boolean _IsChecked;


    public String Id

    {

        get { return _Id; }

        set { _Id = value; }

    }

    public String Descripcion

    {

        get { return _Descripcion; }

        set { _Descripcion = value; }

    }

    public Boolean IsChecked

    {

        get { return _IsChecked; }

        set

        {

           _IsChecked = value;

            NotifyPropertyChanged("IsChecked");

            OnItemChecked.Invoke();

        }

    }


    public static Action OnItemChecked;


public class ReglaViewModel : ViewModelBase

{

    private ObservableCollection<CatalogoModel> _origenes;


    CatalogoModel.OnItemChecked = () =>

            {

                var x = Origenes.Count;  //Entra cada vez que cambia algo en _origenes

            };

}


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 981 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信