0

这可能是一个奇怪的问题,但我来了(如果这是一个糟糕的数据库设计或只是我所处的奇怪情况,请告诉我)。

我的数据库中有两个表:ProductGroup 和Parameters。一个包含有关其名称的各种产品组的信息,另一个包含有关可应用于每个组的各种参数的信息(从而使每个组不同)。

现在为了关联这两个表,设置了第三个表 - GroupParameters 具有两个主键:parameterId 和 groupId,第三列是该组的参数值。

现在我有一个屏幕,显示有关每个组及其参数值的信息。用户也应该能够编辑这些值。因此,我的问题是如何将此值(存储在第三个表中)绑定到文本框。一般来说,在这种情况下我将如何绑定控件。

多谢你们!

编辑:我遗漏了一个重要的细节。我想使用DataSetDataTable对象来存储数据库中的内存数据并将它们绑定到控件。其原因与问题无关,但它与我必须跟踪更改并能够按照用户的意愿撤消它们有关:(

4

2 回答 2

0

我在这里没有看到任何真正糟糕的设计。

您可以为此构建 UI 作为用户必须从中选择的产品组列表(ListBox 绑定到 ProductGroups 集合),然后您可以拥有一个带有 ListBox、名为 CurrentGroupId 的属性和一些控制按钮的用户控件(例如“确定”)。将 CurrentGroupId 绑定到 ProductGroups 列表框的选定值。当 CurrentGroupId 更改或参数集合更改时,您应该使用 LINQ 或其他方式过滤此内部 ListBox 项目 - 基本上用 GroupParameter-s 重新填充 ListBox,其中 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>

如果您需要让用户能够添加新参数,您可以创建一些添加功能,该功能将在参数集合中添加一个具有当前选定组 ID 的新条目。然后用户可以在您的用户控件中编辑刚刚添加的项目。

希望它有所帮助,如果我刚才所说的很难理解,我想我可以用代码编写大部分内容。不要犹豫,问我:)

于 2009-03-23T15:40:09.023 回答
0

实际上对我有用的最好的事情是使用MultiBinding。我没有意识到这一点——不得不通过谷歌搜索查询自己学习很糟糕(即使用书学习会很慢)。

于 2009-03-30T20:59:02.897 回答