仅当对象属性为 true 时才绑定 DataGridColumn
Posted
技术标签:
【中文标题】仅当对象属性为 true 时才绑定 DataGridColumn【英文标题】:DataGridColumn binding only if object property is true 【发布时间】:2019-04-04 12:14:59 【问题描述】:我目前在尝试在 WPF 中进行一些条件绑定时遇到问题。我已经阅读了这个问题,似乎“可见性”并不是 DataGridColumns 的真正选项,因为它不在逻辑树视图中。 我目前有一个对象“设备”,其中包含对象“通道”的列表。这些通道可以是输入或输出,表示为布尔“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】:如果你想要多个网格,那么你需要根据需要过滤多个项目集合。
对于您的要求,假设通道对象的总数相对较少,我会做这样的事情。
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。
【讨论】:
谢谢。想知道您是否可以避免创建多个列表,但我想这是这样做的方法:) @StephanFuhlendorff 即使你不打算走完整的 MVVM 路线,分离 U.I. 通常更干净、更容易。来自任何类型的数据逻辑。 当然。我只是担心稍后在尝试编辑频道时会导致问题,所以我试图尽可能长时间地将它们保持在一起:)以上是关于仅当对象属性为 true 时才绑定 DataGridColumn的主要内容,如果未能解决你的问题,请参考以下文章
仅当 Validation 为 True 时才启用 Jbutton
仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数