2016-08-04 72 views
0

我有一個datagrid與datagridComboBoxColumn。 datagrid的項目源是一個名爲Products的自定義類,它具有一個名爲Installer的屬性(也稱爲Contact的自定義類)。Datagrid組合框不綁定到屬性 - wpf

我想要將datagridComboBoxColumn項目源綁定到所有聯繫人,並將選定的comboBox值賦值給安裝程序。這不起作用,有誰能請給我一個手嗎?在此先感謝

這將不勝感激。我看過其他類似的帖子(如this onethis one),但情況並不完全相同。

我的XAML代碼:

<DataGrid x:Name="productsList" AutoGenerateColumns="False" IsReadOnly="True" CanUserResizeRows="False" 
       CanUserResizeColumns="True" ColumnWidth="*" GridLinesVisibility="None"> 
       <DataGrid.Columns> 

        <DataGridTextColumn Header="Ref" 
            Binding="{Binding Ref}" 
            /> 
        <DataGridTextColumn Header="Product" 
            Binding="{Binding Product}" 
            /> 
        <DataGridComboBoxColumn Header="Installer" SelectedItemBinding="{Binding Installer, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Contacts}"/> 

       </DataGrid.Columns> 
</DataGrid> 

我的後臺代碼:

public partial class CatalogPage : Page 
{ 
    ObservableCollection<CatalogProduct> mProductList = new ObservableCollection<CatalogProduct>(); 

    public ObservableCollection<Contact> Contacts 
    { 
     get 
     { 
      return Parent.mContactsPage.GetContacts(); 
     } 
    } 

    private LocalConfigurationPage Parent { get; set; } 
    public CatalogPage(LocalConfigurationPage localConfigurationPage) 
    { 
     InitializeComponent(); 

     Parent = localConfigurationPage; 

     productsList.ItemsSource = mProductList; 


    } 
} 

這是CatalogProduct類:

public class CatalogProduct 
{ 
    public string Ref { get; set; } 
    public string Product { get; set; } 
    public Contact Installer { get; set; } 
} 
+0

也適用更新來源觸發器。 – AnjumSKhan

+0

對不起@AnjumSKhan,你能指定一些更詳細的嗎?我應該在哪裏應用?作爲DataGrid的屬性? – chincheta73

+0

...在您的selecteditem綁定中的comboboxcolumn – AnjumSKhan

回答

0

夫婦的你做錯了這裏的東西。

  1. Contacts存在於CatalogPage所以,{Binding Contacts}不會工作。這是因爲DataGridRowDataContext是該行所示的Item。對於你的行,它將是CatalogProduct,並且在那裏沒有Contacts

    相反,你必須這樣做:

    ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}

  2. 其次,有已知問題DataGridComboBoxColumn,所以總是用這樣的:

    <DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <ComboBox SelectedItem="{Binding Installer, UpdateSourceTrigger=PropertyChanged}}" ItemsSource="{Binding DataContext.Contacts, RelativeSource={RelativeSource AncestorType=DataGrid}}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
    
  3. 最後,如果你想用Installer值更新ComboBoxColumn,爲Installer實施更改通知,併爲設置。否則,現在它將工作Combobox -> Installer而不是反之亦然。

+0

謝謝!我已經完成了你所說的改變,但仍然沒有奏效。有一個改進,現在我可以看到組合框,但它是空的。我想我錯過了一些明顯的... 我已經在Contacts屬性的get語句中設置了一個斷點,但它並沒有在那裏突破。當組合框要求聯繫人時,我期待中斷。 通常我使用代碼隱藏而不是綁定來實現,但在這裏,如果我命名組合框,我無法從代碼隱藏中訪問它,這就是爲什麼我在這裏有點失落,對不起。感謝您的幫助@AnjumSKhan – chincheta73

+0

@ chincheta73您的聯繫人屬性是私人的,使其公開。 – AnjumSKhan

+0

我已經嘗試過,但沒有更新我的帖子對不起。現在我的帖子已更新,聯繫人屬性是公開的,沒有任何更改。 – chincheta73