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

本文关键字:依赖 属性 控件 用户 另一个 VM 绑定 | 更新日期: 2023-09-27 18:26:08

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

<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>

我在这里错过了什么?二传手?触发

或者这只是一个想法,有依赖关系的用户控件可以绑定到视图模型吗?还是它必须与自身绑定?


编辑-2014年10月10日下午1点31分在重新思考整个解决方案后,我为我的问题提出了以下场景。我将Dependency属性绑定到视图的视图模型,并让视图模型相互交互,而不是让其他视图模型与此特定视图对话。。。

这是它的代码。。

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

我还保护了依赖属性,这样其他人就无法访问它。除非有更好的方法来跟踪房地产的变化,否则我现在坚持这样做。

同样,不确定这是最好的解决方案,但它完成了任务。


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

在绑定上尝试Mode=TwoWay