我不确定这是否可行,但这是我的设置:
我有一个自定义文本框,仅用于处理热键选择。在这里,我有一个DependencyProperty
用于SelectedHotKey
。
然后我有一个自定义控件,它是一个标签,文本框和一个按钮。此控件还公开与TextBox同名的DependencyProperty
,它仅通过以下方式与TextBox绑定:
SelectedHotKey="{Binding ElementName=Main, Path=SelectedHotKey, Mode=TwoWay}"
使用此依赖项属性,我希望设置文本框的SelectedHotKey,它将适当地更改Text
。
然后我使用该用户控件并绑定到我的ViewModel。
除了初始化案例外,我完成了所有这些工作。
当我的ViewModel已经设置并传递给绑定中的UserControl时,该初始设置器甚至不会被命中,因此它不会通过我的控件传播。我考虑过放入一个PropertyMetaData方法,但这是一个静态方法,我无法访问我的实例文本框。
有什么想法吗?如果我需要进一步澄清,请告诉我。
答案 0 :(得分:3)
不要将代码逻辑放在包装依赖项属性的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
}