假设我在 MainWindow.xaml 中有一个 WPF 应用程序 (exe):
<Grid>
<extraControls:MyMVVMUserControl MyDependencyProperty="{Binding Something}"/>
<extraControls:MyUserControl MyDependencyProperty="{Binding Something}" />
</Grid>
我的 MainWindow.xaml.cs 看起来像这样:
public MainWindow()
{
DataContext = new MainWindowVM();
InitializeComponent();
}
我的 MainWindowVM.cs 有一个属性设置,用于Something
通知属性更改。
用户控件是在单独的 dll 中制作的。正如您可能猜到的那样,MyMVVMUserControl
将 DataContext 设置为视图模型。
public MyMVVMUserControl()
{
DataContext = new MyMVVMUserControlVM();
InitializeComponent();
}
MyUserControl
在后面的代码中没有设置 DataContext。
所以有趣的是,它们的MyDependencyProperty
设置完全相同。
但是 MVVM 版本不起作用。
在深入研究之后,我发现MainWindow.xaml{Binding Something}
中的 View Model 设置为 MyMVVMUserControl 用作 DataContext(而不是 MainWindow.cs 中设置的 DataContext(设置为 MainWindowVM))。
我的问题是为什么?
为什么 WPF 会查看用户控件内部并将其 DataContext 用于实际应用程序中的绑定?
(注意:我知道我可以通过在绑定中设置源来解决这个问题,但我希望其他人能够使用我的用户控件。但是有了这个问题,我现在有一个内置的“陷阱”供我想要的任何人使用使用我的用户控件。)