【问题标题】:Setting WPf Datagrid Combobox value to its respective textbox将 WPf Datagrid Combobox 值设置为其各自的文本框
【发布时间】:2011-01-01 15:53:41
【问题描述】:

我有一个文本框和一个组合框作为模板列。下面是 XAML

<wpfkit:DataGrid Margin="3" Style="{DynamicResource SimpleDataGrid}" 
 FontWeight="Normal" MaxHeight="100" CanUserAddRows="True" 
 ItemsSource="{Binding Source={StaticResource odpExistingGHSCodesColl}}" 
 AutoGenerateColumns="False" Name="dgGHS" VerticalScrollBarVisibility="Visible"
 <wpfkit:DataGrid.Columns>
       <wpfkit:DataGridTemplateColumn IsReadOnly="True">
         <wpfkit:DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
             <Image Style="{DynamicResource SimpleImageDelete}"/>
           </DataTemplate>
          </wpfkit:DataGridTemplateColumn.CellTemplate>
        </wpfkit:DataGridTemplateColumn>
        <wpfkit:DataGridTemplateColumn IsReadOnly="True">
          <wpfkit:DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
             <ComboBox  x:Name="cbTGHSCodes" 
      ItemsSource="{Binding Source={StaticResource   odpGHSCodesColl}}" 
      DisplayMemberPath="fldCode" SelectedItem="{Binding Path=fldGHSCodeList}"
      SelectedValue="fldCode" SelectedValuePath="fldDescription"> 
            </ComboBox>
           </DataTemplate>
         </wpfkit:DataGridTemplateColumn.CellTemplate> </wpfkit:DataGridTemplateColumn> <wpfkit:DataGridTemplateColumn IsReadOnly="True"> <wpfkit:DataGridTemplateColumn.CellTemplate>
       <DataTemplate> 
           <TextBox x:Name="tbTGHSCodeDescription" Text="{Binding Path=fldDescription, ElementName=cbTGHSCodes}"> </TextBox></DataTemplate>
   </wpfkit:DataGridTemplateColumn.CellTemplate>
  </wpfkit:DataGridTemplateColumn>
 </wpfkit:DataGrid.Columns>
</wpfkit:DataGrid>

我有一个可观察的集合 (odpGHSCodesColl),我在其中插入代码及其各自的描述。代码存储为 fldCodes 属性,而 fldDescription 具有描述。所以我想要实现的是,如果代码 P1 有 Desc ABC , P2 有 DFG , P4 有 UHY ,那么如果从组合框中选择 P1 则下一列中的相应文本框将填充 ABC ,如果 P2 则 DFG 等等. 我希望你能够明白。我找不到任何附加的事件。如果可能的话,给我一些 XAML 本身的例子,这样我就需要编写更少的代码。

【问题讨论】:

  • 拜托!! people@stackoverflow,帮帮我!!!

标签: wpf datagrid combobox textbox selecteditem


【解决方案1】:

您将无法使用上面列出的名称绑定方法,单元格模板绑定无法正确解析。在您的输出窗口中,您应该看到与绑定相关的错误列表。 即使您可以执行此绑定,您也会有多个具有相同 x:Name="cbTGHSCodes" 的组合框(列中的每个单元格一个)(即使您可以在像您这样的数据模板中执行此操作,您也会绑定到哪个组合框正在尝试吗?)

您需要使用组合框绑定在基础对象上设置 code 属性。当你设置代码时,你的底层对象应该设置描述,然后你的底层对象应该调用 INotifyPropertyChanged,这反过来会更新 UI。

基本上,您的数据网格将有两列。每列都有一个单元格模板,该模板绑定到行中显示的项目的属性。当代码更改行中的项目时,将找到新的描述并设置其描述属性,然后 NotifyPropertyChanged 将提醒 UI。

【讨论】:

  • 嗨,Aran,您能否用一些相关代码详细说明您的示例。这对我有很大的帮助
  • 嗨,阿兰,通过一个小小的尝试,我几乎接近解决方案,但没有得到正确的解决方案。也就是说,如果我选择一个代码,则在网格的第一行中,然后在集合中获取更新,但在具有文本框的下一列中,什么都不显示。同样,当我添加下一个时,第一行 [0] 的描述显示在 col[2] 和 row[0] 的 row[2] 中,并且 row[1] 保持空白。有什么可能的解决方案。
  • 这里是 VB 代码: Private Sub cbTGHSCodes_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) If dgGHS.SelectedIndex >= 0 Then Dim cbTGHSCodes As ComboBox = DirectCast (发件人,组合框)pvExistingGHSCodesColl(dgGHS.SelectedIndex).fldCode = pvGHSCodesList(cbTGHSCodes.SelectedIndex).fldCode pvExistingGHSCodesColl(dgGHS.SelectedIndex).fldDescription = pvGHSCodesList(cbTGHSCodes.SelectedIndex).fldDescription pvExistingGHSCodesColl.Add(New ExistingGHSCodesColl.Add(New ExistingGHSCodesColl)
  • 和 xaml 是 wpfkit:DataGridTemplateColumn>
  • 看看这里sites.google.com/site/wpfprojects 并下载DataGridtest.zip,它有一个简单的项目,使用两列一组合一文本。我不使用模板列我使用组合列和文本列。我不认为网格应该始终处于编辑模式。无论如何它应该给你一些想法......
猜你喜欢
  • 2011-09-01
  • 2018-04-15
  • 2014-05-30
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多