Привязка управляет несколькими таблицами данных - PullRequest
0 голосов
/ 23 марта 2009

Это, наверное, странный вопрос, но здесь я пойду (дайте мне знать, если это плохой дизайн базы данных или просто странная ситуация, в которой я нахожусь).

У меня есть две таблицы в моей базе данных: ProductGroup и Parameters. Одна содержит информацию о различных группах продуктов по названию, а другая содержит информацию о различных параметрах, которые можно применять к каждой группе (и, таким образом, сделать каждую группу отдельной).

Теперь, чтобы связать две таблицы, настроена третья таблица - GroupParameters с двумя первичными ключами: parameterId и groupId, а третий столбец является значением параметра для этой группы.

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

Спасибо, ребята!

РЕДАКТИРОВАТЬ: Есть одна важная деталь, которую я пропустил. Я хочу использовать объекты DataSet и DataTable для хранения данных в памяти из базы данных, а также для их привязки к элементам управления. Причина этого не связана с проблемой, но это связано с тем, что мне приходится отслеживать изменения и иметь возможность отменять их по желанию пользователей: (* ​​1017 *

Ответы [ 2 ]

0 голосов
/ 31 марта 2009

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

0 голосов
/ 23 марта 2009

Я не вижу здесь действительно плохого дизайна.

Для этого вы можете создать пользовательский интерфейс в виде списка групп товаров, из которого пользователь должен выбрать (ListBox, привязанный к коллекции ProductGroups), затем вы можете иметь пользовательский элемент управления с ListBox, свойством с именем CurrentGroupId и некоторыми кнопками управления ( например "ОК"). Свяжите CurrentGroupId с выбранным значением ListBox для ProductGroups. Когда CurrentGroupId изменяется или изменяется коллекция параметров, вы должны фильтровать эти внутренние элементы ListBox с помощью LINQ или чего-либо еще - в основном, пополняйте ListBox с помощью GroupParameter-s, где CurrentGroupId соответствует выбранному ProductGroupId. Элементы ListBox должны быть объектами GroupParameter-s.

Теперь (наконец-то :)) ответ на ваш вопрос: у элементов списка шаблонов данных может быть текстовое поле, привязанное к свойству Value следующим образом (здесь «local» - ваше пространство имен):

<DataTemplate DataType={x:Type local:GroupParameter}>
  <StackPanel Orientation="Horizontal">
    <TextBox Text="{Binding Value, Mode=TwoWay}" />
    <Button Content="OK" Click=INSERT_YOUR_OK_HANDLER_HERE />
    <Button Content="Cancel" Click=INSERT_YOUR_CANCEL_HANDLER_HERE />
  </StackPanel>
</DataTemplate>

Если вам нужно дать пользователю возможность добавлять новые параметры, вы можете сделать некоторые функции Добавить, которые добавят новую запись в коллекцию параметров с текущим выбранным идентификатором группы. Затем пользователь может редактировать только что добавленный элемент в вашем пользовательском элементе управления.

Надеюсь, это поможет, и если мне трудно понять, что я только что сказал, я мог бы написать большую часть этого кода, я думаю. Не стесняйтесь просить меня:)

...