我目前在尝试在WPF中进行条件绑定时遇到问题。我已经阅读了该问题,似乎“可见性”并不是DataGridColumns的真正选择,因为它不在逻辑树视图中。 我目前有一个对象“ Device”,其中包含对象“ Channel”的列表。这些通道可以是输入或输出,表示为布尔“ 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时隐藏整个行或完全跳过它。
答案 0 :(得分:2)
如果需要多个网格,则需要根据需要过滤多个项目集合。
对于您的需求,假设通道对象的总数相对较小,我会做类似的事情。
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。