【问题标题】:List DependencyProperty always returning null列出 DependencyProperty 总是返回 null
【发布时间】:2018-12-14 18:36:22
【问题描述】:

我有一个具有以下 DependencyProperty 的自定义控件“ToolbarMenuButton”:

public ObservableCollection<object> TbMenuItems
{
    get { return (ObservableCollection<object>)GetValue(TbMenuItemsProperty); }
    set { SetValue(TbMenuItemsProperty, value); }
}

public static readonly DependencyProperty TbMenuItemsProperty =
    DependencyProperty.Register("TbMenuItems", typeof(ObservableCollection<object>), typeof(ToolbarMenuButton), new PropertyMetadata(null));

我是这样设置的:

<customs:ToolbarMenuButton TbText="By Flight" TbIcon="PlaneRotated45"
                           TbMenuItems="{Binding Flights}"
                           TbItemCommand="{Binding FlightSelect}">

它显示出来了,没问题。现在,自定义控件中有一个用于此按钮的单击处理程序,可确保设置了上下文菜单,如果未设置,它会根据上面显示的依赖属性“TbMenuItems”创建一个新菜单。

错误: 此属性始终为空(单击按钮时,我在运行时遇到空异常)。我已经经历了大约 40 个有关此问题的 stackoverflow 答案,它们要么不适用,要么没有解决。据我了解,不会调用依赖属性的 get/set,但我不确定我应该如何从中获取数据。

我的尝试: 我尝试在设置航班时通知属性更改。我已经确保通过将其中一个放在按钮旁边的文本块中来设置航班(所以我也知道数据上下文和路径等都是正确的)。我已将其更改为可观察的集合(最初是一个列表),看看是否有帮助。其他依赖属性似乎都可以正常工作(当然,它们也绑定到样式中的数据模板,不确定是否重要)。我现在不知道该去哪里。

【问题讨论】:

  • 当您说该属性为空时,您的意思是TbMenuItems="{Binding Flights}" 不起作用?但是TbItemCommand="{Binding FlightSelect}" 有效吗?除此之外,为什么它是 ObservableCollection?您是否打算在设置属性值后添加元素。
  • PropertyMetadata 有一个回调,您可以将其注册为第二个参数。看看它是否被击中。
  • @Clemens -- 我不知道该命令是否有效,因为我无法打开菜单以单击一个选项,但其他两个属性有效。这是一个可观察的集合,因为这是我尝试过的另一个线程中的答案,它最初是列表。
  • @MrZander - 我会在我回到我的电脑时尝试一下
  • public IEnumerable TbMenuItems { ... }。类似于 ItemsControl 的 ItemsSource。

标签: c# wpf xaml dependency-properties


【解决方案1】:

问题是您为您的集合类型属性使用了一个过于特定的类型,这与数据绑定产生的值不兼容。

您应该改用可能使用的最通用的集合类型,通常是IEnumerable

public IEnumerable TbMenuItems
{
    get { return (IEnumerable)GetValue(TbMenuItemsProperty); }
    set { SetValue(TbMenuItemsProperty, value); }
}

public static readonly DependencyProperty TbMenuItemsProperty = DependencyProperty.Register(
    nameof(TbMenuItems), typeof(IEnumerable), typeof(ToolbarMenuButton));

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 2016-11-02
    • 2014-05-06
    • 2012-06-05
    • 2014-05-30
    • 2014-02-23
    • 2017-10-12
    • 2013-08-16
    • 2016-03-28
    相关资源
    最近更新 更多