代码之家  ›  专栏  ›  技术社区  ›  user240141

将WPf Datagrid Combobox值设置为其各自的文本框

  •  1
  • user240141  · 技术社区  · 16 年前

    我有一个文本框和一个组合框作为模板列。下面是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,依此类推。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Aran Mulholland JohnnyAce    16 年前

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

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

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

    推荐文章