检查列表框以更新网格

时间:2013-11-10 01:38:27

标签: c# .net wpf

这是我的问题: 我有一个填写了学生的清单框。通过选中复选框选中学生时,我希望它显示在数据网格中。此外,如果学生未经检查,则应将其从数据网格中删除。

我可以将我的集合绑定到一个核对表框但是当一个学生被检查时它不会触发我认为的属性更改事件,因为更改的属性是它所绑定的集合的子节点。所以我也将属性更改为集合。

以下是我一直在玩的一些代码。

它必然会受到:

public IEnumerable<SelectedStudent> ActiveStudents
{
    get { return _activeStudents; }
    set
    {
        _activeStudents = value;
        RaisePropertyChanged("ActiveStudents");
        RaisePropertyChanged("GridDisplay");
    }
}

public IEnumerable<SelectedStudent> GridDisplay
{
    get
    {
        var aa = _activeStudents.Where(a => a.Select == true);
        return aa;
    }
    set
    {
        _activeStudents = value;
        RaisePropertyChanged("GridDisplay");
    }
}

选择的学生班级:

#region Fields

        private int _studentId;
        private string _firstName;
        private string _lastName;
        private bool _printCertificate;
        private bool _select;
        private int _testDateId;
        private string _rank;

        #endregion

public int StudentId
{
    get { return _studentId; }
    set
    {
        _studentId = value;
        RaisePropertyChanged("StudentId");
    }
}

public string FirstName
{
    get { return _firstName; }
    set
    {
        _firstName = value;
        RaisePropertyChanged("FirstName");
    }
}
public string LastName
{
    get { return _lastName; }
    set
    {
        _lastName = value;
        RaisePropertyChanged("LastName");
    }
}

public string Student
{
    get { return string.Format("{0} {1}", FirstName, LastName); }
}

public bool PrintCertificate
{
    get { return _printCertificate; }
    set
    {
        _printCertificate = value;
        RaisePropertyChanged("PrintCertificate");
    }
}
public bool Select
{
    get { return _select; }
    set
    {
        _select = value;
        RaisePropertyChanged("Select");
    }
}
public int TestDateId
{
    get { return _testDateId; }
    set
    {
        _testDateId = value;
        RaisePropertyChanged("TestDateId");
    }
}
public string Rank
{
    get { return _rank; }
    set
    {
        _rank = value;
        RaisePropertyChanged("Rank");
    }
}

#region INotifyPropertyChanged

        public event PropertyChangedEventHandler PropertyChanged;

        public void RaisePropertyChanged(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

        #endregion

现在我的Xaml

  <xctk:CheckListBox Height="200" 
    ItemsSource="{Binding Path=ActiveStudents, Mode=TwoWay}"
    Name="ActiveStudents" 
    DisplayMemberPath="Student"
    ValueMemberPath="StudentID" 
    SelectedMemberPath="Select"    
    SelectedItem="{Binding SelectedStudent}"
    SelectedItemsOverride="{Binding SelectedStudentValue}"/>

<DataGrid  MaxHeight="200" MinHeight="200" Name="MyGrid"
        Grid.Row="1" Grid.Column="1" 
        VerticalAlignment="Top"
        HeadersVisibility="Column"
        AutoGenerateColumns="False" 
        AlternatingRowBackground="#F0EDF2"                                                             
        ItemsSource="{Binding GridDisplay}"   
        VerticalScrollBarVisibility="Auto" 
        CanUserAddRows="false">
    <DataGrid.GroupStyle>.....

除此之外,我还有一个下拉列表,用于确定学生在核对表框中预先检查的内容,从而使它们显示在数据网格中。最后一部分我相信我可以搞清楚,但我不能让我从检查表框中选择的学生在数据网格中显示。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

CheckedListBox有一个ItemCheck事件。您可以通过e.Index查看事件中选中/取消选中的项目。您还需要查看e.CurrentValue和e.NewValue。