Как обновить исходный код WPF ListView? - PullRequest
0 голосов
/ 22 ноября 2010

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

P.S. Установка ItemSource на ноль и повторная привязка в этом случае не подходит.

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Убедитесь, что ваш объект реализует INotifyPropertyChanged и вызывает требуемое уведомление об изменениях при вызове метода установки для вашего свойства.

// This is a simple customer class that 
// implements the IPropertyChange interface.
public class DemoCustomer  : INotifyPropertyChanged
{
    // These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    private string customerNameValue = String.Empty;
    private string phoneNumberValue = String.Empty;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    // The constructor is private to enforce the factory pattern.
    private DemoCustomer()
    {
        customerNameValue = "Customer";
        phoneNumberValue = "(555)555-5555";
    }

    // This is the public factory method.
    public static DemoCustomer CreateNewCustomer()
    {
        return new DemoCustomer();
    }

    // This property represents an ID, suitable
    // for use as a primary key in a database.
    public Guid ID
    {
        get
        {
            return this.idValue;
        }
    }

    public string CustomerName
    {
        get
        {
            return this.customerNameValue;
        }

        set
        {
            if (value != this.customerNameValue)
            {
                this.customerNameValue = value;
                NotifyPropertyChanged("CustomerName");
            }
        }
    }

    public string PhoneNumber
    {
        get
        {
            return this.phoneNumberValue;
        }

        set
        {
            if (value != this.phoneNumberValue)
            {
                this.phoneNumberValue = value;
                NotifyPropertyChanged("PhoneNumber");
            }
        }
  }
}

Если вы вместо этого ссылаетесь на элементы, добавляемые / удаляемые из коллекциичто вы не упомянули), то вам нужно убедиться, что ваша коллекция является ObservableCollection<T>

1 голос
/ 22 ноября 2010

это должно быть автоматическим, вам просто нужно использовать ObservableCollection в качестве контейнера для ваших объектов, а класс вашего объекта должен реализовать INotifyPropertyChanged (вы можете просто реализовать шаблон для свойств, о которых вы хотите уведомить просмотр списка оизменение)

MSDN

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