我有一个WPF UserControl,其中包含一个名为MyDP的自定义DependencyProperty。我想将它绑定到我的ViewModel上的属性(它作为UserControl的DataContext注入)。我知道一种方法,通过在父窗口的XAML中设置UserControl声明中的绑定来实现:
<Window x:Class="MyNamespace.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="clr-namespace:MyNamespace.Views">
<StackPanel>
<views:MyControl MyDP="{Binding Path=MyVMProperty, Mode=OneWayToSource}"/>
</StackPanel>
</Window>
这样可以正常工作,但作为替代方法,我可以在UserControl的XAML中设置绑定,类似于我如何将UserControl中各个控件的绑定设置为ViewModel的其他属性?
答案 0 :(得分:15)
你无法直接做你原先想到的事情。你可能试过并得到了一些编译错误。您无法在UserControl的根XAML中内联自定义属性,因为元素类型是UserControl,因此编译器会根据该类型强制执行属性名称,而不是您的自定义类型。您可以通过更改为附加属性来解决这个问题,但这实际上会改变MyDP的含义。相反,您可以在StyleControl的Style中设置默认值,并获得额外的好处,即只需执行原始示例中的操作即可在任何声明的实例上覆盖它。在UserControl的根元素下设置:
<UserControl.Style>
<Style>
<Setter Property="views:MyControl.MyDp" Value="{Binding Path=MyVMProperty, Mode=OneWayToSource}" />
</Style>
</UserControl.Style>
答案 1 :(得分:1)
您还可以在MainWindow的构造函数中定义绑定,如下所示:
public MainWindow()
{
InitializeComponent();
SetBinding(MyDPProperty, "MyVMProperty");
}