绑定到另一个VM的usercontrol上的Dependency Property

时间:2014-10-10 15:13:05

标签: c# wpf xaml mvvm

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

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

我试图添加一个名为KeyboardAlphaMode的依赖项属性,该属性可以被使用此用户控件的其他视图模型切换

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>

我在这里缺少什么?一个二传手?触发?

或者这只是一个想法,可以将具有依赖关系的usercontrol绑定到viewmodel吗?还是必须绑定自己?


编辑 - 10/10/2014 @ 1:31 pm 在重新思考整个解决方案后,我想出了以下针对我的问题的方案。 我将Dependency属性绑定到视图的视图模型,让视图模型相互交互,而不是让其他视图模型与此特定视图对话......

这是代码..

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

    this.SetBinding(KeyboardAlphaModeProperty, alphaModeBinding);

我还使依赖属性受到保护,因此没有其他人可以访问它。 除非有更好的方法来跟踪房产变化,否则我现在仍然坚持这一点。

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


1 个答案:

答案 0 :(得分:0)

在绑定上尝试Mode=TwoWay