SelectedItem из SelectedItem - PullRequest
       15

SelectedItem из SelectedItem

0 голосов
/ 03 августа 2011

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

То, что я пытаюсь сделать, звучит довольно просто, но я понятия не имею, как заставить его работать ... возможно, я все еще плохо знаком с wpf или не достаточно wpfy :))

Я разрабатываю интерфейс для детали в автоматизированном производстве:

  • У меня есть несколько мест, где можно ставить поддоны (но они также могут быть пустыми).
  • Каждый поддон может иметь до 3 мест, где могут быть установлены детали
  • Все создается динамически из базы данных и реагирует на изменения.
    • Положение деталей на поддоне также определяется базой данных и должно быть визуализировано

Я хотел бы иметь:

  • Обзор мест для поддонов с предварительным просмотром поддона
  • Когда я выбираю место, я хочу увидеть подробный вид этого места
  • Когда я щелкаю деталь на поддоне подробного поддона, я хочу видеть детали к детали

Первые два пункта довольно просты и прекрасно работают:

  • У меня есть DataTemplate для каждого компонента (деталь, поддон, место для поддонов). На самом деле это UserControls, которые импортируются как Dateatemplates
  • обзор представляет собой ListBox с местами как DataContext
  • для подробного представления места Я использую UserControl и привязываю его к SelectedItem Списка

Я попытался привязать текст текстового блока к идентификатору выбранной детали ... и потерпел неудачу.

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

Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 11 августа 2011

У меня есть решение ... это нехорошо, но работает.

  • Я создал событие в палитре, которое срабатывает, когда изменяется выбранное место детали
  • Я обрабатываю событие на паллете и создаю новое
  • И, наконец, я обращаюсь с этим в обзоре и соответствующим образом изменяю подробный вид

Скорее всего, есть более приятные решения, но этого будет достаточно.

0 голосов
/ 03 августа 2011

Контекст важен, если я использую ContentControl и привязываю его содержимое к SelectedItem следующим образом:

<ContentControl Content="{Binding SelectedItem, ElementName=mylistbox}">

Я могу привязать идентификатор выбранного элемента в шаблоне данных следующим образом:

<ContentControl.ContentTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding ID}" />
    </DataTemplate>
</ContentControl.ContentTemplate>

Это потому, что установка Content для ContentControl автоматически также устанавливает DataContext, и эта привязка относится к DataContext, поскольку ни один источник (ElementName, RelativeSource, Source) не имеет было указано.

Я не знаю, как ваш UserControl обрабатывает контекст, если DataContext не затронут, такие привязки не будут работать. Вам нужно будет связать непосредственно тогда:

<uc:MyDetailsView Data="{Binding SelectedItem, ElementName=mylistbox}">
    <!-- ... -->
        <TextBlock Text="{Binding SelectedItem.ID, ElementName=mylistbox}" />

Это, конечно, отрицательно сказывается на назначении привязки для самого UserControl. Но если вы не разместите какой-либо соответствующий код, довольно сложно сказать, что не так.

Также проверьте окно вывода в VisualStudio, там будут отображаться ошибки привязки и могут предоставить ценную информацию о том, что пошло не так.

0 голосов
/ 03 августа 2011

Возможно попробовать связывание ElementName?

<TextBlock Text="{Binding ElementName=Name_of_your_Listbox, Path=SelectedItem.ID" />

Можете ли вы опубликовать немного больше кода вашего TextBlock и вашего Binding?

...