2012-11-10 111 views
0

我有學術造型師從數據庫中使用實體框架獲取的集合。DataGridTemplateColumn中的綁定

Lecturers是內LecturerListViewModel一個屬性:

public ObservableCollection<Lecturer> Lecturers { get; set; } 

Lecturer是從數據庫類逆向工程:

public class Lecturer 
{ 
    public Lecturer() 
    { 
    } 

    public int Id_Lecturer { get; set; } 
    public string Name { get; set; } 
    public int? Academic_Degree_Id { get; set; } 
    public virtual AcademicDegree AcademicDegree { get; set; } // lazy loading 
} 

我想在DataGrid顯示所有從數據庫中的講師(的所有單元該網格是可編輯的;當用戶點擊保存按鈕的所有數據將是s在數據庫中存儲)。 問題在於最近的學位對組合框的約束。我試過這種方式:

<StackPanel d:DataContext="{d:DesignInstance Type=ViewModel:LecturerListViewModel}"> 
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Lecturers}" HeadersVisibility="Column"> 
     <DataGrid.Columns> 

      <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
      <DataGridTemplateColumn Header="Academic degree"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <!-- PROBLEM HERE. SelectedItem="{Binding AcademicDegree}" doesn't work --> 
         <ComboBox SelectedItem="{Binding AcademicDegree}" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AcademicDegrees}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 
    </DataGrid> 
    <Button Content="Add" HorizontalAlignment="Center" Width="100" Margin="15" Name="AddLecturerButton" /> 
</StackPanel> 

ItemsSource="{Binding Lecturers}"被正確綁定。點擊checkbox後有列表。但程序啓動後,checkboxes中的值爲空。爲什麼?我該如何解決它?

PS。 LecturerListViewModel綁定在代碼隱藏中。

回答

0

您的物品需要通過INotifyPropertyChanged提供更改通知。 (所以如果延遲加載完成,需要爲屬性發出通知)

+0

嘿!綁定到'Name'即使沒有實現'INotifyPropertyChanged'也能工作。只是'ComboBox'不能正常工作。我已將「Lecturer」類更改爲[此版本](http://wklej.org/id/867503/),但「ComboBoxes」中仍然沒有選定的值。怎麼了? –

+1

@ patryk.beza:有太多的事情可以* *是錯誤的,通知只是其中最常見的原因... –

0

如果要將枚舉值綁定到組合框,則必須提供帶有枚舉值的IEnumerable。達到此目的的最簡單方法是在您的資源中定義ObjectDataProvider

xmlns:System="clr-namespace:System;assembly=mscorlib" 
xmlns:MyEnums="clr-namespace:LocalNamespaceWhereAcademicDegreeIsDefined"  
... 
<Window.Resources> 
    <ObjectDataProvider x:Key="AcademicDegrees" MethodName="GetValues" ObjectType="{x:Type System:Enum}" > 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="MyEnums:AcademicDegree"/> 
      </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
<Window.Resources> 
... 
... 
<ComboBox SelectedItem="{Binding AcademicDegree}" ItemsSource="{Binding Source={StaticResource AcademicDegrees}}" /> 
... 
... 
+0

你試過了嗎? – Christian

相關問題