【问题标题】:DataGridColumn binding only if object property is true仅当对象属性为 true 时才绑定 DataGridColumn
【发布时间】: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 时隐藏整行或完全跳过它。

【问题讨论】:

    标签: c# wpf binding visibility datagridcolumn


    【解决方案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. 通常更干净、更容易。来自任何类型的数据逻辑。
    • 当然。我只是担心稍后在尝试编辑频道时会导致问题,所以我试图尽可能长时间地将它们保持在一起:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多