【问题标题】:Dependency Property not displaying on initialization初始化时不显示依赖属性
【发布时间】:2012-07-25 14:52:00
【问题描述】:

我不确定这是否可能,但这是我的设置:

我有一个自定义文本框,仅用于处理热键选择。在这里,我有一个DependencyProperty,它用于SelectedHotKey

然后我有一个自定义控件,它是一个标签、文本框和一个按钮。此控件还公开了一个与 TextBox 同名的 DependencyProperty,它仅通过以下方式与 TextBox 相关联:

SelectedHotKey="{Binding ElementName=Main, Path=SelectedHotKey, Mode=TwoWay}"

使用这个依赖属性,我希望设置文本框的 SelectedHotKey,这将适当地更改 Text

然后我使用该用户控件并绑定到我的 ViewModel。

除了初始化案例之外,我已经完成了所有这些工作。

当我的 ViewModel 已经设置并传递给绑定中的 UserControl 时,该初始设置器甚至不会被命中,因此它不会通过我的控件向下传播。我考虑过放入一个 PropertyMetaData 方法,但这是一个静态方法,我无法访问我的实例文本框。

有什么想法吗?如果我需要进一步澄清,请告诉我。

【问题讨论】:

  • 也许这会有所帮助:SelectedHotKey="{Binding ElementName=Main, Path=SelectedHotKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ...

标签: c# .net wpf data-binding dependency-properties


【解决方案1】:

不要将代码逻辑放在包装依赖属性的 CLR 属性中。正如您已经看到的,由于框架可以直接在依赖属性上调用SetValue,因此无法保证它们会被调用。

您在正确的轨道上:您必须使用依赖属性元数据。使用属性更改回调的第一个参数访问实例。

DependencyProperty SomeProperty = DependencyProperty.Register(
    "Some",
    propertyType,
    ownerType,
    new FrameworkPropertyMetadata(defaultValue, OnSomePropertyChanged));

static void OnSomePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
    // "d" is your instance here, cast it to the required type
}

【讨论】:

  • Oy,你知道我考虑过研究那个参数会转换成什么,但我已经花了太多时间,并想我会在这里问,如果没有答案,我会在 AM 中尝试更多。这正是我所需要的。谢谢一百万
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
相关资源
最近更新 更多