Поле комбинированного списка WPF DisplayMemberPath

Выживание Версии выпуска дает хороший обзор.

Вещи я встретился - большинство уже упоминается

Переменная инициализация безусловно наиболее распространенное. В Visual Studio отладка создает explicitely, инициализируйте выделенную память к данным значениям, посмотрите, например, Значения Памяти здесь. Эти значения обычно легко определить, вызвать за пределы ошибка, когда используется в качестве индекса или нарушения прав доступа, когда используется в качестве указателя. Неинициализированная булевская переменная верна, однако, и может вызвать неинициализированные ошибки памяти, идущие необнаруженный в течение многих лет.

В Сборках конечных версий, где память не является explicitely, инициализировал его, просто сохраняет содержание, которое это имело прежде. Это приводит к "забавным значениям" и "случайным" катастрофическим отказам, но как часто к детерминированным катастрофическим отказам, которые требуют, чтобы по-видимому несвязанная команда была выполнена перед командой, которая на самом деле отказывает. Это вызывается первой командой, "создающей" ячейку памяти с определенными значениями, и когда ячейки памяти переработаны, вторая команда рассматривает их как инициализации. Это более распространено с неинициализированными переменными стека, чем "куча", но последний произошел со мной, также.

Необработанная инициализация памяти может также отличаться в сборке конечных версий, начинаете ли Вы с Visual Studio (присоединенный отладчик) по сравнению с запуском с проводника. Это делает "самый хороший" вид ошибок сборки конечных версий, которые никогда не появляются под отладчиком.

Допустимая Оптимизация приходит второй в моем exeprience. Стандарт C++ позволяет большой оптимизации происходить, который может быть удивительным, но совершенно допустим, например, когда два указателя искажают ту же ячейку памяти, порядок инициализации не рассматривают, или несколько потоков изменяют те же ячейки памяти, и Вы ожидаете определенный порядок, в котором поток B видит изменения, внесенные потоком A. Часто, компилятор обвинен в них. Не настолько быстрый, молодой yedi! - видят ниже

Синхронизация , Сборки конечных версий только "работают быстрее" по ряду причин (оптимизация, регистрируя функции, обеспечивающие точку синхронизации потока, код отладки как утверждает не выполняемый и т.д.), также относительная синхронизация между операциями изменяется существенно. Наиболее распространенная проблема, раскрытая этим, является условиями состязания, но также и заходит в тупик и простой "различный порядок" выполнение кода message/timer/event-based. Даже при том, что они синхронизируют проблемы, они могут быть удивительно стабильными через сборки и платформы с воспроизведением, которое "всегда работает, за исключением ПК 23".

Байты охраны . Сборки отладки часто помещают (больше) защитные байты вокруг выбранных экземпляров и выделений, для защиты от индексного переполнения, и иногда теряет значимость. В редких случаях, где код полагается на смещения или размеры, например, сериализацию необработанных структур, они отличаются.

Другие различия в коде Некоторые инструкции - например, утверждают - не оценивают ни к чему в сборках конечных версий. Иногда у них есть различные побочные эффекты. Это распространено с макро-обманом, как в классике (предупреждение: несколько ошибок)

#ifdef DEBUG
#define Log(x) cout << #x << x << "\n";
#else 
#define Log(x)
#endif

if (foo)
  Log(x)
if (bar)
  Run();

, Который, в сборке конечных версий, оценивает к если (нечто & & панель) Этот тип ошибки очень очень редок с нормальным кодом C/C++ и макросами, которые правильно записаны.

Ошибки Компилятора Этого действительно никогда не происходит. Хорошо - это делает, но Вы имеете по большей части Вашу карьеру более обеспеченное предположение, что это не делает. В десятилетие работы с VC6 я нашел тот, где я все еще убежден, что это - незакрепленная ошибка компилятора, по сравнению с десятками шаблонов (возможно, даже сотни экземпляров) с недостаточным пониманием священного писания (иначе стандарт).

57
задан Jose 22 September 2009 в 14:58
поделиться

3 ответа

DisplayMemberPath указывает путь к свойству отображаемой строки для каждого элемента. В вашем случае вы должны установить для него «Имя» , а не «{Имя привязки}» .

135
ответ дан 24 November 2019 в 19:22
поделиться

Вы не привязываетесь к данным в классе, вы говорите ему, чтобы он получил данные от члена класса, который назван членом «name», поэтому, если ваш экземпляр имеет item.Name == "steve" он пытается получить данные из item.steve .

Чтобы это работало, вы должны удалить привязку из MemberPath. Измените его на MemberPath = "Name" , это укажет ему получить данные от члена "Name". Таким образом, он будет вызывать item.Name , а не item.steve .

8
ответ дан 24 November 2019 в 19:22
поделиться

Вам следует изменить MemberPath="{Binding Name}" на MemberPath="Name". Тогда все будет работать.

5
ответ дан 24 November 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: