Обязательная проблема, которая сводит меня с ума - PullRequest
1 голос
/ 02 октября 2009

Я (и другие программисты с другого форума) пытались решить проблему связывания в течение нескольких дней. Никто не может помочь ... Кто-нибудь здесь сможет мне помочь? Очевидно, проблема кажется довольно простой, но когда вы погружаетесь в нее, поверьте мне, вы сжигаете несколько нейронов Вот оно: я создал тестовый проект, который воспроизводит проблему. Загрузите его с здесь . Запустите проект и:

  • выберите участника из списка

  • введите почтовый индекс в текстовом поле (это французский ZIP, от 01000 до 98000)

  • выберите город в выпадающем списке

  • выберите другого участника и сделайте то же самое (с другим почтовым индексом) тогда выберите обратно предыдущего участника и повторно выберите другой => см. как свойство member.Ville.ID потерян и так как Выбранный элемент в выпадающем списке потерял также.

Какого черта это делает? Как это решить?

P.S: извините за французский в свойствах классов и в других местах ...

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Что-то возвращает это значение обратно. Я не слишком много исследовал, но я поставил диагностику привязки (вот как это сделать самостоятельно: здесь ) на вашу привязку и получил это:

Update - got raw value '9800'
Update - using final value '9800'
SetValue at level 1 to Ville (hash=15263193) using RuntimePropertyInfo(CodePostal): '9700'
Got PropertyChanged event from Ville (hash=15263193)
Update - got raw value '97001'
Update - using final value '97001'
SetValue at level 1 to Ville (hash=15263193) using RuntimePropertyInfo(CodePostal): '97001'
Got PropertyChanged event from Ville (hash=15263193)
Update - got raw value '01000'
Update - using final value '01000'
SetValue at level 1 to Ville (hash=15263193) using RuntimePropertyInfo(CodePostal): '01000'
Got PropertyChanged event from Ville (hash=15263193)

Обратите внимание, что как только я набрал последний «1» в 97001, было получено уведомление PropertyChanged, в результате чего его значение вернулось к 01000, поэтому что-то снова стало таким.

Я поставил условную точку останова в методе Set вашего кода для "value.Equals (" 01000 ")" и получил трассировку стека, когда это произошло:

TestMembre.exe!TestMembre.Ville.set_CodePostal(String value = "01000") Line 47  Basic
TestMembre.exe!TestMembre.Window1.txtCodePostal_TextChanged(Object sender = {System.Windows.Controls.TextBox}, System.Windows.Controls.TextChangedEventArgs e = {System.Windows.Controls.TextChangedEventArgs})

Итак, что вы должны заметить, это то, что событие TextChanged в txtCodePostal имеет некоторый код, который устанавливает это значение:

Else
   'If the zip code doesn't exist, it is set to one that does
   txtCodePostal.Text = "01000"

Я не знаю точно, как ваша логика должна работать, но эта строка кода всегда запускает и сбрасывает ваше значение.

Надеюсь, это поможет!

0 голосов
/ 03 октября 2009

Ваше сообщение помогло мне в том, что я смог отладить привязку, благодаря вашей ссылке. Обратите внимание, что для меня txtCodePostal.Text = "01000" никогда не было, потому что я всегда набираю правильный почтовый индекс. Это должно происходить только в том случае, если пользователь вводит почтовый индекс, который не существует. Тем не менее, я использовал источники трассировки с сайта Bea Stollnitz для отладки моей привязки. Я сохранил его в этот текстовый файл . Есть некоторые ошибки, которые происходят, когда SelectionChanged из списка происходит. Я еще не все понял, но я пытаюсь ... Если бы вы могли взглянуть на этот файл, он был бы очень любезен ...

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