2010-01-05 79 views
1

我有一個文本框和一個組合框作爲模板列。下面是XAML將WPf Datagrid Combobox值設置爲各自的文本框

<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本身的例子,以便我需要編寫較少的代碼。

+0

請! people @ stackoverflow,幫助我! – 2010-01-06 08:00:23

回答

1

您將無法使用上面列出的名稱綁定方法,單元格模板綁定無法正確解析。在您的輸出窗口中,您應該看到與綁定相關的錯誤列表。 即使你可以做這個綁定,你也會有多個ComboBoxes具有相同的x:Name =「cbTGHSCodes」(對於列中的每個單元格都有一個)(即使你可以在數據模板中這樣做,也可以綁定哪一個)您正在嘗試?)

您需要的是使用組合框綁定來設置您的基礎對象的代碼屬性。當你設置代碼時,你的底層對象應該設置描述,然後你的底層對象應該調用INotifyPropertyChanged,這反過來會更新UI。

基本上你的數據網格將有兩列。每列將有一個單元格模板綁定到行中顯示的項目的屬性。當代碼更改時,行中的項目將找到新的描述並設置其描述屬性,然後NotifyPropertyChanged將提醒用戶界面。

+0

嗨阿蘭, 請你請詳細說明你的例子與一些相關的代碼。這對我很有幫助 – 2010-01-07 07:30:15

+0

嗨阿蘭, 有一個小小的打擊和嘗試,我幾乎接近解決方案,但沒有得到正確的結果。這就是說,在網格的第一行中,如果我選擇一個代碼,然後在集合中獲取更新,但在具有文本框的下一列中,則不顯示任何內容。同樣,當我添加下一個時,第一行[0]的描述顯示在col [2]的行[2]中,行[0]和行[1]保持空白。這將是什麼可能的解決方案。 – 2010-01-07 09:24:15

+0

這裏是VB代碼: 私人小組cbTGHSCodes_SelectionChanged(BYVAL發件人爲System.Object的,BYVALË作爲System.Windows.Controls.SelectionChangedEventArgs) 如果dgGHS.SelectedIndex> = 0。然後 昏暗cbTGHSCodes作爲組合框= DirectCast(發件人,組合框) pvExistingGHSCodesColl(dgGHS.SelectedIndex).fldCode = pvGHSCodesList(cbTGHSCodes.SelectedIndex).fldCode pvExistingGHSCodesColl(dgGHS.SelectedIndex).fldDescription = pvGHSCodesList(cbTGHSCodes.SelectedIndex).fldDescription \t \t \t pvExistingGHSCodesColl.Add(新澤西ExistingGHSCodes) End If End Sub – 2010-01-07 09:24:49