2012-07-26 42 views
0

我不知道这甚至有可能,但这里是我的设置:依赖项属性不显示在初始化

我有一个定制的文本框是只是为了对付热键选择。在这里我有一个DependencyProperty这是SelectedHotKey

然后我有一个自定义控件是一个标签,文本框和一个按钮。这种控制也暴露了同名的文本框的DependencyProperty,它只是通过捆绑到TextBox:

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

有了这个依赖属性,我期待以设置文本框的SelectedHotKey,这将相应地更改Text

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

除了初始化情况,我已经可以工作了。

当我的ViewModel已经建立并传递给绑定中的UserControl时,该初始设置器甚至没有命中,所以它不会传播我的控件。我想过放入一个PropertyMetaData方法,但是这是一个静态方法,我无法访问我的实例文本框。

任何想法?如果我需要进一步澄清,请告诉我。

+0

也许这可以帮助:'SelectedHotKey = “{绑定的ElementName =主,路径= SelectedHotKey,模式=双向,UpdateSourceTrigger =的PropertyChanged}” ...' – Dante 2012-07-26 22:58:44

回答

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 
} 
+0

Oy公司,你知道,我想过寻找到什么参数会投射为,但我已经花费了太多时间,并且认为我会问这里,如果没有答案,在AM中尝试更多。这正是我需要的。太感谢了 – 2012-07-27 04:40:01