这可能是一个奇怪的问题,但我在这里(如果这是一个糟糕的数据库设计或者我只是一个奇怪的情况,请告诉我。)
我的数据库中有两个表:ProductGroup和Parameters。一个包含有关各个产品组的信息,另一个包含有关可应用于每个组的各种参数的信息(从而使每个组不同)。
现在要关联这两个表,设置了第三个表 - GroupParameters有两个主键:parameterId和groupId,第三列是该组参数的值。
现在我有一个屏幕,显示有关每个组及其参数值的信息。用户也应该能够编辑这些值。因此,我的问题是如何将此值(存储在第三个表中)绑定到文本框。一般来说,在这种情况下如何绑定控件。
谢谢你们!
编辑:我遗漏了一个重要的细节。我想使用 DataSet 和 DataTable 对象来存储数据库中的内存数据,并将它们绑定到控件。其原因与问题无关,但它与我必须跟踪更改并能够根据用户意愿撤消更改:(
答案 0 :(得分:0)
我在这里看不到任何真正糟糕的设计。
您可以为此构建UI作为用户必须选择的产品组列表(ListBox绑定到ProductGroups集合),然后您可以拥有一个带有ListBox的用户控件,名为CurrentGroupId的属性和一些控制按钮(例如“OK”)。将CurrentGroupId绑定到ProductGroups ListBox的选定值。当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>
如果您需要为用户提供添加新参数的功能,则可以进行一些添加功能,这将在Parameters集合中添加具有当前所选组ID的新条目。然后,用户可以在用户控件中编辑刚刚添加的项目。
希望它有所帮助,如果我很难理解我刚刚说过的话,我想我可以在代码中写出大部分内容。不要犹豫,问我:)
答案 1 :(得分:0)
实际上对我有用的最好的事情是使用MultiBinding。我不知道这一点 - 它很难通过谷歌搜索查询自己学习(即使用书来学习也会很慢)。