【问题标题】:Custom DependencyProperty not updating external view model自定义 DependencyProperty 不更新外部视图模型
【发布时间】:2012-09-12 00:25:05
【问题描述】:

我有一个用户控件,其中有一个填充了成员的 DataGrid。 DataGrid.ItemsSource 绑定到模型上的 ObservableCollection。 DataGrid.SelectedItem 绑定到模型上的 SelectedMember 字段。 SelectedMember._set 调用 NotifyPropertyChanged 和事件调用 SetValue() 为暴露的 DependencyProperty。

此用户控件位于页面上。该页面也有一个视图模型。我正在尝试将 UserControl.CurrentMember 绑定到 viewmodel.SelectedMember 但它没有改变。我可以将 CurrentMember.MemberName 绑定到一个文本框,并且该框填充成员名称,因此看起来 UserControl 正确地公开了 DependencyProperty。但如果我绑定到模型,它不会更新。

我找不到任何交叉绑定。绑定到 TextBox 工作正常。页面模型上的字段是新的,因此没有任何绑定。

可能是什么问题?页面模型上的字段是否需要是 DependencyProperty?如果是这种情况,编译器会给我一个错误。

我会尝试获取代码示例,但它是如此根深蒂固,我不能只发布几行代码。

汤姆·P.

【问题讨论】:

  • 您是否缺少双向绑定?默认情况下,文本框文本是双向的。
  • 我已经尝试过 TwoWay、OneWay、OneWayToSource... 唯一发生的事情是我得到了 StackOverflow 异常。我已将 TwoWayByDefault 添加到 DependencyProperty。这些都没有帮助。

标签: wpf binding user-controls dependency-properties


【解决方案1】:

在梳理代码并尝试在新项目中复制问题后,我发现了问题。

在 UserControl 中,我将 DataContext 设置为模型。但是当我将 UserControl.DataContext 放在页面上时,它会被覆盖。我需要做的是命名 MainGrid 并将 MainGrid 的 DataContext 设置为 UserControlModel。 MainGrid 是 UserControl 私有的,不会被覆盖。现在效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多