设置对WPF用户控件内的自定义DependencyProperty的绑定

时间:2010-02-17 22:26:34

标签: wpf xaml user-controls binding dependency-properties

我有一个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的其他属性?

2 个答案:

答案 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");
}