代码之家  ›  专栏  ›  技术社区  ›  Aleksey Pavlov

在组合框中显示项,其中项的bool属性等于其他bool属性

  •  0
  • Aleksey Pavlov  · 技术社区  · 6 年前

    我有一个列表<serialport>,其中项的isopen属性等于true或false。我只想显示isopen等于checkbox.ischecked属性的项。

    VIEW模型代码:

        private ObservableCollection<SerialPort> _PortsCollection;
        public ObservableCollection<SerialPort> PortsCollection
        {
            get { return _PortsCollection; }
            set { _PortsCollection = value; OnPropertyChanged("PortsCollection"); }
        }
        private SerialPort _SelectedPort;
        public SerialPort SelectedPort
        {
            get { return _SelectedPort; }
            set { _SelectedPort = value; OnPropertyChanged("SelectedPort"); }
        }
        private bool _CheckBoxChecked;
        public bool CheckBoxChecked
        {
            get { return _CheckBoxChecked; }
            set { _CheckBoxChecked = value; OnPropertyChanged("CheckBoxChecked"); }
        }
    

    XAML:

            <ComboBox
                Width="100"
                Height="23"
                DisplayMemberPath="PortName"
                ItemsSource="{Binding PortsCollection}"
                SelectedItem="{Binding SelectedPort}"/>
            <CheckBox
                Content="Show ports where IsOpen == CheckBoxChecked"
                IsChecked="{Binding CheckBoxChecked}"/>
    

    我试过用Converter来实现这一点,但Converter只允许一个参数。我不想在转换器中分离参数,因为它很难看。知道如何在转换器中不使用分离参数的情况下实现这一点吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aleksey Pavlov    6 年前

    我会这样做的。我会根据checkboxchecked的值更改portsCollection返回的值,

    private List<SerialPort> _AllPorts;
    
    public ObservableCollection<SerialPort> PortsCollection
    {
        get 
        { 
            return new ObservableCollection<SerialPort>(_AllPorts.Where(x => x.IsOpen == CheckBoxChecked));
        }
        set { _PortsCollection = value; OnPropertyChanged("PortsCollection"); }
    }
    

    并告诉GUI,当复选框更改时,PortsCollection已更改。

    private bool _CheckBoxChecked;
    public bool CheckBoxChecked
    {
        get { return _CheckBoxChecked; }
        set { _CheckBoxChecked = value; 
              OnPropertyChanged("CheckBoxChecked"); 
              OnPropertyChanged("PortsCollection"); 
             }
    }
    

    我认为没有办法在XAML中应用筛选器