Отображать элементы в ComboBox, где свойство bool элемента равно другому свойству bool - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть список , где элементы имеют свойство IsOpen, равное true или false.Я хочу отображать только те элементы, для которых IsOpen равно свойству CheckBox.IsChecked.

Код модели представления:

    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}"/>

Я пытался сделать это с преобразователем, но преобразователь допускает только один параметр.Я не хочу разделять параметры в конвертере, потому что это некрасиво.Любая идея, как это сделать без разделения параметров в преобразователе?

1 Ответ

0 голосов
/ 16 ноября 2018

Вот как бы я это сделал. Я бы изменил то, что возвращает PortsCollection, в зависимости от значения CheckBoxChecked,

private List<SerialPort> _AllPorts;

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

и сообщить графическому интерфейсу, что коллекция PortsCollection изменилась при изменении флажка.

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

Я не думаю, что есть способ применить фильтр в XAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...