WPF绑定基于属性的Combobox项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF绑定基于属性的Combobox项相关的知识,希望对你有一定的参考价值。

我的View Model课程:

class Student : INotifyPropertyChanged
    {
      private string name;       
      private bool isVisible;
      public event PropertyChangedEventHandler PropertyChanged;

      public string PersonName
      {
          get { return name; }
          set
          {
              name = value;
              OnPropertyChanged("PersonName");
          }
      }

      public bool IsVisible
      {
          get { return isVisible; }
          set
          {
              isVisible = value;
              OnPropertyChanged("IsVisible");
          }
      }
    }

我的学生collection存储我所有的objects

public ObservableCollection<Student> Students { get; set; }

XAML:

<ComboBox x:Name="cbStudents" 
          ItemsSource="{Binding Students}"
          SelectionChanged="cbInterfaces_SelectionChanged"/>

所以在某些方面我想从我的ComboBox消失几个学生,所以我只是将IsVisible值更改为False

任何想法如何使用XAML

答案

您可以让您的学生集合仅返回可见学生。

    //All students (visible and invisible)
    ObservableCollection<Students> _AllStudents = GetAllStudentsFromDataSource();

    //only visible students
    ObservableCollection<Students> _VisibleStudents = new ObservableCollection<Students>();

    foreach(var _s in _AllStudents.Where(x => x.IsVisible)){
         _VisibleStudents.Add(_s);
    }

    //your property
    public ObservableCollection<Student> Students { get{ return _VisibleStudents; } }

如果您的复选框切换学生的可见性,您的复选框可以绑定到如下命令:

<Checkbox IsChecked="{Binding IsCheckboxChecked}" Command={Binding ToggleStudents}" />

您的视图模型对复选框切换和命令有一个额外的控制:

    bool _IsCheckboxChecked = false;
    public bool IsCheckboxChecked { 
           get { return _IsCheckboxChecked;}
           set {
                  if(_IsCheckboxChecked != value)
                  {
                    _IsCheckboxChecked = value;
                  }
               }
      }

public ICommand ToggleStudents
{
    get;
    internal set;
}

private void ToggleStudentsCommand()
{
    ToggleStudents = new RelayCommand(ToggleStudentsExecute);
}

public void ToggleStudentsExecute()
{
     _VisibleStudents.Clear();
    if(_IsCheckboxChecked){
        foreach(var _s in _AllStudents.Where(x => x.IsVisible)){
          _VisibleStudents.Add(_s);
        }
      }
    else
    {
       foreach(var _s in _AllStudents.Where(x => x.IsVisible == false)){
          _VisibleStudents.Add(_s);
        }
     }

    OnPropertyChanged("Students");

}

你的xaml不需要改变。

以上是关于WPF绑定基于属性的Combobox项的主要内容,如果未能解决你的问题,请参考以下文章

WPF ComboBox SelectedItem 动态绑定

WPF Combobox 绑定选中项

WPF MVVM 将 ComboBox 绑定到 Datagrid 选定项

在wpf中怎么绑定comboBox的值

c#wpf combobox将source绑定到一个collection,item作为另一个collection的属性

wpf combobox 使用总出错