在Windows应用商店拆分应用中,我想将视图模型从页面传递给用户控件。场景是我想在多个页面中重用一些常见的xaml,使用像视图一样的UserControl。
在主页面中:
<common:LayoutAwarePage
...
DataContext="{Binding ViewModel, RelativeSource={RelativeSource Self}}"
... >
<views:MyUserControlView Model="{Binding ViewModel}" />
...
在用户控制代码中:
public sealed partial class MyUserControlView : UserControl
{
public static readonly DependencyProperty ModelProperty =
DependencyProperty.Register("Model", typeof(MenuSource),
typeof(MyUserControlView), null);
...
public ModelType Model
{
get
{
return this.GetValue(ModelProperty) as ModelType ;
}
set
{
this.SetValue(ModelProperty, value);
}
}
永远不会调用模型设置器。如何将用户控件连接到父页面的视图模型?
或者,是否有更好的方法来实现在页面中使用的共享视图?
感谢。
-John
答案 0 :(得分:2)
正确的绑定是:
<views:MyUserControlView Model="{Binding}" />
您已为上面的页面设置了DataContext
。所有绑定都与当前DataContext
相关。
但是仍然不会调用setter。它只是从代码中访问DependencyProperty
的包装器。绑定将直接调用SetValue
。
根据您的要求,您甚至可能不需要定义自己的Model
DependencyProperty
。每个控件都自动从其父控件继承DataContext
。在上面的示例中,用户控件已将其DataContext
设置为与页面相同的视图模型。