WPF MVVM ListView не обновляется! - PullRequest
0 голосов
/ 09 февраля 2011

Я использую Prism v4 и MVVM.В моей модели просмотра у меня есть:

private TB_COMPANY tb;
    public TB_COMPANY Tb {
        get {
            return this.tb;
        }

        private set {
            if ( this.tb != value ) {
                this.tb = value;
                this.RaisePropertyChanged(() => this.Tb);
            }
        }
    }

На моей странице у меня есть сетка данных (я тоже пробовал с просмотром списка, не работает!):

<DataGrid ItemsSource="{Binding Tb.TB_ADDRESS.RL_ADDRESS_PHONE}" .../>

RL_ADDRESS_PHONE - этосписок телефонов компании ... Итак, в какой-то момент я добавляю телефон в список:

private void MyCommand() 
{
    ...
    Tb.TB_ADDRESS.RL_ADDRESS_PHONE.Add(
        new RL_ADDRESS_PHONE
        {
            TB_PHONE = new TB_PHONE 
                       { 
                           NU_PHONE = _txtTelefone, 
                           ST_TYPE = _txtTipoTelefone 
                       }
         });
    ...
}

Но с пользовательским интерфейсом ничего не происходит ... Но в режиме отладки список заполнен .... Что я должен сделать, чтобы обновить пользовательский интерфейс?

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Свойство RL_ADDRESS_PHONE TB_ADDRESS также должно реализовывать INotifyPropertyChanged.Если это List, вы должны использовать ObservableCollection, который реализует INotifyCollectionChanged, что необходимо для поведения, которого вы пытаетесь достичь.

Также, в качестве совета - взгляните наРуководство по проектированию и соглашению об именах языка C # вы можете найти в msdn (хотя в нем написано .net 1.1, оно по-прежнему применимо для любых следующих версий платформы).

2 голосов
/ 09 февраля 2011

Ваша привязка работает?Вы проверили окно вывода?Все ли свойства на вашем пути привязки общедоступны?Требуется больше кода.

Все уведомления о свойствах в стороне: если ваша привязка обнаружит, ObservableCollection она обновит , если вы добавите объекты.Так что я думаю, что вы можете использовать поле или непубличное свойство где-то на пути.

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

0 голосов
/ 09 февраля 2011

Вы упомянули использование службы WCF. Возможно ли, что ваша наблюдаемая коллекция создается в потоке, отличном от потока пользовательского интерфейса. В этом случае пользовательский интерфейс не сможет привязаться к нему. Bea Stollnitz обсуждает проблемы с перекрестным связыванием в своем блоге здесь

Вы можете обойти это, вызвав создание наблюдаемой коллекции в потоке пользовательского интерфейса.

...