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

Tim*_*out 8 wpf xaml binding user-controls 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>
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但作为替代方法,我可以在UserControl的XAML中设置绑定,类似于我如何将UserControl中各个控件的绑定设置为ViewModel的其他属性?

Joh*_*wen 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>
Run Code Online (Sandbox Code Playgroud)