【问题标题】:WPF UserControl Dependency Property Setter not triggering [duplicate]WPF UserControl依赖属性设置器未触发[重复]
【发布时间】:2011-08-04 09:13:41
【问题描述】:

可能重复:
WPF: XAML property declarations not being set via Setters?

我被困在看似愚蠢的问题上。

我有一个用户控件 MyControl.xaml,而 MyControl.xaml.cs 定义了一个公共依赖属性:

public static readonly DependencyProperty VisibleItemsProperty =
    DependencyProperty.Register("VisibleItems", typeof(object), typeof(MyControl));

public object VisibleItems
{
    get { return (object)GetValue(VisibleItemsProperty); }
    set { SetValue(VisibleItemsProperty, value); }
}

在另一个视图 SomeOtherViewA 中,我声明了我的控制:

<cc:MyControl VisibleItems="{Binding VisibleTables}"  />

VisibleTables 是视图模型 SomeOtherViewModelA 上的依赖属性。

我知道 VisibleTables 返回值,因为它绑定到 SomeOtherViewA 中的其他控件(例如 ListBox)并且它们工作正常。

由于某种原因,我的自定义用户控件中的依赖属性从未设置。我错过了一些明显的东西吗?

【问题讨论】:

  • 我也注意到了这种行为,只是假设这与 WPF 引擎和 DP 的机制如何评估 XAML 有关,这就是为什么我不再与 DP 的设置者混淆的原因。有趣的问题,想知道它到底是如何工作的。
  • 你的意思是在你的依赖属性 typeof(MyControl) 而不是 typeof(SpyFilterList)
  • 是的,我更改了名称以简化我的问题。调整我的帖子,谢谢!

标签: c# .net wpf user-controls binding


【解决方案1】:

我想我刚刚找到a duplicate

还有更多关于这个on MSDN:

WPF XAML 处理器使用属性 依赖的系统方法 加载二进制 XAML 时的属性 和处理属性是 依赖属性。这 有效地绕过了财产 包装纸。当你实现自定义 依赖属性,你必须 考虑到这种行为,应该 避免在您的 属性包装器以外的 属性系统方法 GetValue 和 设置值。

(直接调用SetValue,这些包装器属性只是为了方便后面的代码)

【讨论】:

  • 有趣。不是很直观..必须围绕新现实环绕大脑!
  • 是的,真正令人着迷的是 WPF 实际上并没有调用您的 setter/getter,但如果您将它们排除在外,它仍然无法编译。
  • @Robert Levy:你确定不是你的上下文对包装器的依赖阻止了它的编译吗?我刚刚尝试定义一个单独的 DP,它工作正常,可以绑定到它并使用 SetValue 方法更改它的值就好了。
  • 表明 XAML 解析器确实将 Binding 实例分配给您的 VisibleItems 属性。由于 VisibleItems 是一个对象,而不是 Binding,GetValue/SetValue 方法允许 DependencyObject 支持对象或 Binding 的值。
猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 2021-11-08
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多