Привязка DataGridColumn, только если свойство объекта имеет значение true - PullRequest
0 голосов
/ 31 октября 2018

В настоящее время я сталкиваюсь с проблемой при попытке выполнить условное связывание в WPF. Я прочитал о проблеме, и кажется, что «видимость» на самом деле не вариант для DataGridColumns, так как его нет в логическом дереве. В настоящее время у меня есть объект «Устройство», который содержит список объектов «Канал». Эти каналы могут быть как входными, так и выходными, которые представлены как bool "isInput". Я пытаюсь создать две сетки данных: одну с входными данными и одну с выходными данными.

<DataGrid Grid.Row="0" AutoGenerateColumns="False" ItemsSource="{Binding Path=Channels}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Type}" 
             Visibility="{Binding Path=(model:Channel.IsInput), 
             Converter={StaticResource BooltoVisibilityConverter}}"/>
        </DataGrid.Columns>
</DataGrid>

Это то, что у меня есть в данный момент, но поскольку видимость не работает, я хотел бы либо скрыть всю строку, когда IsInput = false, либо пропустить ее полностью.

1 Ответ

0 голосов
/ 31 октября 2018

Если вам нужно несколько сеток, вам нужно отфильтровать несколько коллекций элементов по мере необходимости.

Для того, что вам нужно, предполагая, что общее количество объектов канала относительно мало, я бы сделал что-то вроде этого.

public class ViewModel: ViewModelBase
{
    public ViewModel()
    {
        AllChannels = new ObservableCollection<Channel>();
        AllChannels.CollectionChanged += (s,e) =>
           { 
               RaisePropertyChanged(nameof(InputChannels));
               RaisePropertyChanged(nameof(OutputChannels));
           }
    }

    private ObservableCollection<Channel> AllChanels { get; }

    public IEnumerable<Channel> InputChannels => AllChannels.Where(c => c.IsInput);
    public IEnumerable<Channel> OutputChannels => AllChannels.Where(c => !c.IsInput);

    public void AddChannel(Channel channel)
    {
        AllChannels.Add(channel);
    }
}        

Теперь вы можете создать два элемента управления сеткой и связать их свойство ItemsSource с InputChannels и OutputChannels.

...