【问题标题】:Binding to ICollectionView doesn't display anything绑定到 ICollectionView 不显示任何内容
【发布时间】:2019-05-20 08:07:12
【问题描述】:

当我直接绑定到 EventsSource 时它可以工作,但当我将绑定更改为 EventsView 时它就不行了。

// EventsControl class

private bool Filter(object obj)
{
    if (!(obj is Event @event)) return false;
    if (string.IsNullOrEmpty(Location)) return true;

    return true;
    //  return @event.Location == Location;
}

public static readonly DependencyProperty EventsSourceProperty = DependencyProperty.Register(
    nameof(EventsSource), typeof(ObservableCollection<Event>), typeof(EventsControl), new PropertyMetadata(default(ObservableCollection<Event>), EventsSourceChanged));

public ObservableCollection<Event> EventsSource
{
    get => (ObservableCollection<Event>)GetValue(EventsSourceProperty);
    set => SetValue(EventsSourceProperty, value);
}

public ICollectionView EventsView { get; set; } 

private static void EventsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    if (!(d is EventsControl eventsControl)) return;

    var view = new CollectionViewSource { Source = e.NewValue }.View;
    view.Filter += eventsControl.Filter;
    eventsControl.EventsView = view;
    //view.Refresh();
}

这段代码有什么问题?

我不想使用默认视图 ( WPF CollectionViewSource Multiple Views?)

【问题讨论】:

  • eventSource 属性正在通知订阅者 - 我不确定其他属性是否会发生这种情况

标签: c# wpf


【解决方案1】:

我将它设置为依赖属性并且它可以工作。不确定这是否是解决问题的最佳方法。

public static readonly DependencyProperty EventsViewProperty = DependencyProperty.Register(
            nameof(EventsView), typeof(ICollectionView), typeof(EventsControl), new PropertyMetadata(default(ICollectionView)));

public ICollectionView EventsView
{
    get => (ICollectionView) GetValue(EventsViewProperty);
    set => SetValue(EventsViewProperty, value);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2021-11-22
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多