WPF Bindinglist кортеж - PullRequest
       4

WPF Bindinglist кортеж

0 голосов
/ 05 мая 2011

Моя цель - привязать набор объектов в WPF. Сначала я попытался использовать дженерики, но потерпел неудачу Поскольку я не могу привести универсальные свойства к интерфейсам INotifyProperty, я могу подключить событие изменения.

Итак, я придумал этот класс для использования в качестве объекта в моем BindingList. (Да, они нужны мне, чтобы уведомлять меня об изменении объекта в списке). Поэтому мне нужно ваше мнение, улучшения в моем коде.

public class GPair : ObservableObject
{
    public GPair()
    {
    }

    private ObservableObject _first;
    public ObservableObject First
    {
        get
        {
            return this._first;
        }
        set
        {
            this._first = value;
            ((ObservableObject)value).PropertyChanged +=new PropertyChangedEventHandler(First_PropertyChanged);
            RaisePropertyChanged("First");
        }
    }
    private ObservableObject _second;
    public ObservableObject Second
    {
        get
        {
            return this._second;
        }
        set
        {
            this._second = value;
            ((ObservableObject)value).PropertyChanged += new PropertyChangedEventHandler(Second_PropertyChanged);
            RaisePropertyChanged("Second");
        }
    }

    private void First_PropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        RaisePropertyChanged("First");
    }
    private void Second_PropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        RaisePropertyChanged("Second");
    }
}

ObservableObject - это просто вспомогательный класс, который реализует INotifyPropertyChanged.

Этот фрагмент кода позволяет мне соединить два объекта в привязке ... Сама привязка будет выглядеть так:

<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding Path=First.ObjectPropertie}" />
    <TextBlock Text="{Binding Path=Second.ObjectPropertie}" />
</StackPanel>

Есть мнения или улучшения ??

С уважением!

1 Ответ

1 голос
/ 05 мая 2011

Я не совсем понимаю, чего вы пытаетесь достичь, но класс GPair выглядит странно

А как насчет чего-то подобного?

  public class ObservablePair : INotifyPropertyChanged
  {
        public event PropertyChangedEventHandler PropertyChanged;

        private MyObject m_First;
        public MyObject First
        {
            get { return m_First; }
            set
            {
                m_First = value;
                OnPropertyChanged("First");
            }

        }

        private MyObject m_Second;
        public MyObject Second
        {
            get { return m_Second; }
            set
            {
                m_Second = value;
                OnPropertyChanged("Second");
            }
        }

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

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...