仅当对象 属性 为真时才绑定 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。
我目前在尝试在 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。