1

テンプレート列としてテキストボックスとコンボボックスがあります。以下は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自体の例をいくつか挙げてください。そうすれば、より少ないコードを書く必要があります。

4

1 に答える 1

0

上で概説した名前バインディング方法を使用することはできません。セルテンプレートバインディングは正しく解決できません。出力ウィンドウに、バインディングに関連するエラーのリストが表示されます。このバインディングを実行できたとしても、同じx:Name = "cbTGHSCodes"(列の各セルに1つ)を持つ複数のComboBoxがあります(あなたのようなデータテンプレートでこれを実行できたとしても、どちらにバインドしますか?しようとしていますか?)

必要なのは、コンボボックスバインディングを使用して、基になるオブジェクトにコードプロパティを設定することです。コードを設定すると、基になるオブジェクトが説明を設定してから、基になるオブジェクトがINotifyPropertyChangedを呼び出す必要があります。これにより、UIが更新されます。

基本的に、データグリッドには2つの列があります。各列には、行に表示されているアイテムのプロパティにバインドするセルテンプレートがあります。コードが変更されると、行の項目は新しい説明を見つけてその説明プロパティを設定し、次にNotifyPropertyChangedがUIに警告します。

于 2010-01-07T06:16:12.240 に答える