0

多対多のテーブルがあり、WPFコントロールのいくつかのフィールドを表示したいと思います。

ここに画像の説明を入力してください

List<Course> courses = new List<Course>()コンボボックスでInstructorIDを選択するたびに、リストコレクションに入力するにはどうすればよいですか?ListViewコントロールのリストからCourseIDとTitleのみを表示したい

これが私のコードです:

public partial class MainWindow : Window
{
    SchoolEntities db = new SchoolEntities();
    public MainWindow()
    {
        InitializeComponent();
        var instructors = db.Instructors.Where(f => f.HireDate == 2011).ToList();

        this.comboBox1.ItemsSource = instructors;
        this.comboBox1.DisplayMemberPath = "LastName";
        this.comboBox1.SelectedValuePath = "InstructorID";           
    }
    List<Course> courses = new List<Course>();

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        int S = (int)this.comboBox1.SelectedValue;
        var InstrSelection = db.Instructors.Include("CourseInstructors.Course").SingleOrDefault(f => f.InstructorID == S);


        foreach (var C in InstrSelection.CourseInstructors)
        {
            courses.Add(C.Course);
        }

        this.listView1.DataContext = null;
        this.listView1.DataContext = courses;
    }
}   

そしてウィンドウxaml

<Window x:Class="School.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="773" Width="677">

<Grid>        
    <ComboBox Height="23" HorizontalAlignment="Left" Name="comboBox1"  SelectionChanged="comboBox1_SelectionChanged"></ComboBox>
    <ListView  HorizontalAlignment="Left" Name="listView1">
        <ListView.View>
         <GridView>
            <GridViewColumn Width="140" Header= "CourseID" />
            <GridViewColumn Width="140" Header= "Title" />                
         </GridView>
        </ListView.View>
    </ListView>
</Grid>

4

2 に答える 2

0

親データ モデルに子データ モデルのコレクションを含めComboBox、親で選択した項目に子をバインドします。ComboBox

たとえば、Instructorモデルには次が含まれます

int インストラクター ID
文字列名
文字列姓
DateTime HireDate
コース一覧

ComboBoxそして、インストラクターの を にバインドしますList<Instructor>ComboBox次に、コースをインストラクターのコンボボックスにバインドできますSelectedItem.Courses

<ComboBox x:Name="InstructorList" ... />

<ComboBox x:Name="CourseList"
          ItemsSource="{Binding ElementName=InstructorList, 
                                Path=SelectedItem.Courses}"
          DisplayMemberPath="Title"
          SelectedValuePath="CourseId" />
于 2012-04-18T14:31:12.347 に答える
0

あなたが何を求めているのかよくわかりません。現在のコードで ListView にコースが表示されないのはなぜですか? その場合、問題は、ItemsSource を設定する必要があるときに、ListView の DataContext を設定していることです。新しいコースを追加する前に、コースのリストもクリアする必要があります。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    courses.Clear();
    ...

    this.listView1.ItemsSource = null; // ItemsSource instead of DataContext
    this.listView1.ItemsSource = courses;
}

編集

また、GridViewColumns に DisplayMemberBindings を追加する必要があります。

<GridViewColumn 
    Width="140" 
    Header="CourseID" 
    DisplayMemberBinding="{Binding CourseID}" /> <!-- Here -->
<GridViewColumn 
    Width="140" 
    Header="Title" 
    DisplayMemberBinding="{Binding Title}" /> <!-- And Here -->
于 2012-04-18T14:32:59.623 に答える