2012-10-11 66 views
0

不是渲染我有我的數據網格「dgSubsytem」列定義像下面組合框在WPF datafrid

<my:DataGridComboBoxColumn x:Name="cmbSubSysSupplier_SRV" Header="Supplier" Width="160"            
             ItemsSource="{Binding RelativeSource}" SelectedValueBinding="{Binding SupplierId}" /> 

正如你從代碼中看到我有一個網格內的組合框。

該組合框的項目源是一個數據表,它綁定在後面的代碼中。

網格的項目源也是另一個綁定在代碼後面的數據表。在代碼組合框的項結合源的

代碼後面是如下

cmbSubSysSupplier_SRV.ItemsSource = dsComboBox.Tables[3].DefaultView; 
cmbSubSysSupplier_SRV.DisplayMemberPath="FullName" ; 
cmbSubSysSupplier_SRV.SelectedValuePath = "SupplierId"; 

問題是組合框本身不渲染。但我可以看到供應商呈現爲文本的價值。問題是什麼?

+0

Datagrid是什麼樣子? –

+0

對不起,我的意思是,Datagrid代碼是什麼樣的? –

+0

你正在引用哪些代碼? –

回答

0

由兩個部分組成的位置:

值的列表中組合框填充:ItemsSource時,應使用靜態資源的約束,從您的視圖模型暴露List<X>領域。

實際值(這裏是X)應該綁定到SelectedItemBinding,使用綁定到數據項。

在後面的代碼中不需要綁定。

+0

但我的數據表「dtcmb」中有我的組合框綁定條目。 AND grid綁定datatable在dtGrid中。我如何編碼這個。我是新來的wpf和綁定。你能證明一下嗎? –

0

在什麼時候你的代碼隱藏的東西運行?

你在兩個地方設置了ItemsSource - 在XAML和Code-Behind中。無論哪一個人都會覆蓋第一個值,因此只會使用最後一個值集。

我懷疑你的XAML正在運行最後,而RelativeSource可能不是你的DataContext上的一個屬性,所以你的ComboBox最終被束縛什麼都沒有。

要解決它,只需刪除您ItemsSource在XAML爲DataGridComboBoxColumn

<my:DataGridComboBoxColumn x:Name="cmbSubSysSupplier_SRV" 
          Header="Supplier" Width="160" 
          SelectedValueBinding="{Binding SupplierId}" /> 

另外結合,一個DataTableDefaultView將返回DataView類型的對象,而DataView沒有特性稱爲FullNameSupplierId,因此您的SelectedValuePathDisplayMemberPath屬性將不起作用。

我建議建立的KeyValuePair<int,string>列表,你的數據項,並綁定你的ComboBoxColumn.ItemsSource到列表中,然後切換到SelectedValuePath"Key"DisplayMemberPath"Value"

+0

我刪除了,但仍然一樣 –

+0

@KuntadyNithesh查看我的答案更新 - 您可能在ComboBox中有項目,但它們沒有顯示,因爲DataView沒有名爲FullName的屬性來顯示。 – Rachel

0

我個人DataGridComboBoxColumn打了很長一段時間我想方法是使用DataGridTemplateColumn
這裏是一個例子:


看起來很多代碼,但evective。 把收集作爲資源:

<Grid.Resources> 
    <CollectionViewSource x:Key="StructuresCollection" Source="{Binding StructuresList, Mode=OneTime}"/> 
</Grid.Resources> 

<DataGridTemplateColumn Header="Structure" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Structures.Name}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate > 
     <DataTemplate> 
      <ComboBox x:Name="CStructures" SelectedItem="{Binding Structures}" DisplayMemberPath="Name" SelectedValue="{Binding IDStructure, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="{Binding IDStructure}" ItemsSource="{Binding Source={StaticResource StructuresCollection}}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn>