1

C#でのプロパティ変更の処理について疑問があります。私のシナリオは次のとおりです。2つのクラスがあります

public class CustomerSupplier : ViewModelBase
{
    public Customer Customer { get; set; }

    private IEnumerable<SupplierSelect> suppliersSelect;
    public IEnumerable<SupplierSelect> SuppliersSelect 
    {
        get
        {
            return suppliersSelect;
        }
        set
        {
            suppliersSelect = value;
            this.NotifyPropertyChanged("SuppliersSelect");
        }
    }
}

public class SupplierSelect : ViewModelBase
{
    public Supplier Supplier { get; set; }

    private bool selected;
    public bool Selected 
    {
        get
        {
            return selected;
        }
        set
        {
            selected = value;
            this.NotifyPropertyChanged("Selected");
        }
    }
}

ViewModelBaseが通常の方法でNotifyPropertyChangedを実装する場合。私のCustomersViewModelには、関係を処理するためのタイプCustomerSupplierのプロパティがあります。必要なのは、CustomersViewModel内からSupplierSelectクラスのSelectedプロパティの変更を検出することです。それ、どうやったら出来るの?

助けてくれてありがとう。

4

2 に答える 2

1

このようなもの:

public class CustomerSupplier : ViewModelBase
{
    public Customer Customer { get; set; }

    private void HandleSupplierSelectPropertChanged(object sender, PropertyChangedEventArgs args)
    {
        if (args.PropertyName == "Selected")
        {
            var selectedSupplier = (SupplierSelect)sender;
            // ...
        }
    }

    private IEnumerable<SupplierSelect> suppliersSelect;
    public IEnumerable<SupplierSelect> SuppliersSelect 
    {
        get
        {
            return suppliersSelect;
        }
        set
        {
            if (suppliersSelect != value)
            {
               if (suppliersSelect != null)
               {
                   foreach (var item in suppliersSelect)
                       item.PropertyChanged -= HandleSupplierSelectPropertChanged;
               }

               suppliersSelect = value;

               if (suppliersSelect != null)
               {
                   foreach (var item in suppliersSelect)
                       item.PropertyChanged += HandleSupplierSelectPropertChanged;
               }

               this.NotifyPropertyChanged("SuppliersSelect");
            }
        }
    }
}

また、注意: 実際のタイプがIEnumerable<SupplierSelect>implementsの場合、INotifyCollectionChangedコレクションの変更を監視しPropertyChangedて、新しいアイテムと古いアイテムのイベントをそれぞれサブスクライブ/サブスクライブ解除する必要があります。

于 2012-09-04T18:17:48.223 に答える
0

新しい SupplierSelect を割り当てるときは、CustomerSupplier の SupplierSelect の PropertyChanged イベントにハンドラーを追加します。

于 2012-09-04T18:16:05.597 に答える