繁体   English   中英

绑定到另一个VM的用户控件上的依赖项属性

[英]Dependency Property on a usercontrol that is bound to another VM

我遇到了以下问题:我当前正在创建一个屏幕键盘,它是一个具有自己的viewmodel的用户控件。

<UserControl.DataContext>
    <Binding Source="{StaticResource Locator}" Path="AlphaNumericKeyboard" />
</UserControl.DataContext>

我正在尝试添加一个名为KeyboardAlphaMode的依赖项属性,该属性可以由使用此usercontrol的其他视图模型切换

public static readonly DependencyProperty KeyboardAlphaModeProperty = DependencyProperty.Register("KeyboardAlphaMode", 
    typeof(UIKeyboardAlphaMode), typeof(AlphaNumericKeyboardView),
    new FrameworkPropertyMetadata(UIKeyboardAlphaMode.LowerCase, new PropertyChangedCallback(KeyboardAlphaModeCallBack)));

    private static void KeyboardAlphaModeCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e){ ... } 

但是,当我尝试从另一个视图绑定到此属性时,从未触发过该回调。

    <k:AlphaNumericKeyboardView x:Name="alphaNumericKeyboard" KeyboardAlphaMode="{Binding KeyboardAlphaMode, UpdateSourceTrigger=PropertyChanged}">
    </k:AlphaNumericKeyboardView>

我在这里想念什么? 二传手? 触发?

或这只是一个想法,具有依赖项的用户控件可以绑定到视图模型吗? 还是必须将其自身绑定?


编辑-2014年10月10日下午1:31重新考虑了整个解决方案后,我想到了以下解决方案。 我将Dependency属性绑定到视图的视图模型,并让视图模型彼此交互,而不是让其他视图模型与该特定视图对话...

这是该代码..

    Binding alphaModeBinding = new Binding("KeyboardAlphaMode")
    {
        Mode = BindingMode.TwoWay,
        TargetNullValue = UIKeyboardAlphaMode.LowerCase,
        FallbackValue = UIKeyboardAlphaMode.LowerCase
    };

    this.SetBinding(KeyboardAlphaModeProperty, alphaModeBinding);

我还使依赖项属性受保护,因此没有人可以访问它。 除非有更好的方法来跟踪属性更改,否则我暂时坚持使用此方法。

同样,不确定这是否是最佳解决方案,但可以完成工作。


在绑定上尝试Mode=TwoWay

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM