【问题标题】:Dependency Property on a usercontrol that is bound to another VM绑定到另一个 VM 的用户控件上的依赖属性
【发布时间】:2014-10-10 15:13:05
【问题描述】:

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

<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 在重新考虑整个解决方案后,我为我的问题提出了以下方案。 我将依赖属性绑定到视图的视图模型,并让视图模型相互交互,而不是让其他视图模型与这个特定视图对话......

这是代码..

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

    this.SetBinding(KeyboardAlphaModeProperty, alphaModeBinding);

我还使依赖属性受到保护,因此其他人无法访问它。 除非有更好的方法来跟踪属性更改,否则我现在坚持这样做。

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


【问题讨论】:

  • 很可能绑定上下文无效。您是否检查了输出是否存在绑定错误? DataContext 的 k:AlphaNumericKeyboardView 是否有 KeyboardAlphaMode 属性?
  • 是的……我没有看到任何绑定错误。
  • 绑定产生的值是否不同于默认值LowerCase?如果属性的有效值没有实际改变,则不会调用更改回调。
  • 是的 - 它实际上是在改变值。

标签: c# wpf xaml mvvm


【解决方案1】:

在绑定上尝试Mode=TwoWay。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多