0

Entity Frameworkを使用してデータベースからフェッチされた学術講師のコレクションがあります。

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(グリッドのすべてのセルは編集可能です。ユーザーが [保存] ボタンをクリックすると、すべてのデータが DB に保存されます)。問題は、最近の学位をコンボボックスにバインドすることです。私はこの方法を試しました:

<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コードビハインドでバインドされています。

4

2 に答える 2

0

オブジェクトは、 経由で変更通知を提供する必要がありますINotifyPropertyChanged。(したがって、遅延読み込みが完了した場合は、プロパティに対して通知を行う必要があります)

于 2012-11-10T19:14:22.630 に答える
0

Enum 値をコンボボックスにバインドする場合は、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}}" />
 ...
 ...
于 2012-11-10T19:41:16.213 に答える