仅当对象 属性 为真时才绑定 DataGridColumn

DataGridColumn binding only if object property is true

我目前在尝试在 WPF 中进行一些条件绑定时遇到问题。我已经阅读了这个问题,似乎 "visibility" 并不是 DataGridColumns 的真正选项,因为它不在 logicaltreeview 中。 我目前有一个对象 "Device",其中包含一个对象列表 "Channel"。这些通道可以是输入或输出,表示为 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 时隐藏整行或完全跳过它。

如果你想要多个网格,那么你需要根据需要过滤多个项目集合。

根据你的要求,假设通道对象的总数比较少,我会做这样的事情。

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。