【发布时间】:2012-10-21 00:34:45
【问题描述】:
我使用 MVVM 模式,所以我自己的控件包含 View 和 ViewModel。
ViewModel 通过 DataContext 属性与 View 连接。这会导致绑定问题。为什么?
假设这种情况:
我创建了新的用户控件——例如——“SuperTextBox”。它有一个属性“SuperValue”。
现在我做了这样的事情:
<Window>
<Window.DataContext>
<vm:WindowViewModel/>
</Window.DataContext>
<local:SuperTextBox SuperValue="{Binding Test}"/>
</Window>
我认为“绑定过程”将 SuperTextBox.SuperValue 与 Window.DataContext.Test 结合起来,但不是,“绑定过程”将 SuperTextBox.SuperValue 与 SuperTextBox.DataContext.Test 结合起来,这对我来说是不自然和误导的。
其他控件,如“TextBox”,我可以通过上述方式使用,因为它们没有 DataContext。
如何使用 MVVM 模式来创建保持自然绑定的用户控件(到父控件的 DataContext)?
编辑:
我得到了很多关于如何绑定到父级的答案,但我很早就知道这一点。问题是 - 我如何通过 MVVM 模式(具有 ViewModel)创建 UserControl 并保持自然绑定 - 默认为父 DataContext。
我想要 ViewMoldel 并且仍然可以像这样绑定:
<local:SuperTextBox SuperValue="{Binding Test}"/>
有可能吗?
【问题讨论】:
-
当您创建一个具有依赖属性的真实用户控件时,就像我发布的那样。但我会编辑我的答案以显示另一种“不自然”的方式:)
标签: c# wpf mvvm binding user-controls