【问题标题】:Setting up binding to a custom DependencyProperty inside a WPF user control设置绑定到 WPF 用户控件内的自定义 DependencyProperty
【发布时间】:2011-01-18 02:21:15
【问题描述】:

我有一个 WPF 用户控件,其中包含一个名为 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 的其他属性?

【问题讨论】:

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


    【解决方案1】:

    你不能直接做你最初的想法。您可能尝试过并遇到了一些编译错误。您不能在 UserControl 的根 XAML 中设置自定义属性内联,因为元素类型是 UserControl,因此编译器会根据该类型而不是您的自定义类型强制执行属性名称。您可以通过更改为附加属性来解决此问题,但这实际上改变了 MyDP 的含义。相反,您可以在样式中为 UserControl 设置默认值,并获得额外的好处,即只需执行原始示例中的操作即可在任何声明的实例上覆盖它。将其设置在 UserControl 的根元素下:

    <UserControl.Style>
        <Style>
            <Setter Property="views:MyControl.MyDp" Value="{Binding Path=MyVMProperty, Mode=OneWayToSource}" />
        </Style>
    </UserControl.Style>
    

    【讨论】:

    • 效果很好,谢谢!不是这个 WPF 菜鸟最明显的方法,但你的解释肯定能澄清情况。
    • 谢谢。对我来说也很有效,虽然我注意到我想将 UC 绑定到数据上下文,所以 OneTime 对我来说是正确的模式。
    • 非常有帮助。谢谢。
    • 聪明的把戏 - 可惜编译器不够聪明,无法根据 UserControl 定义的“x:Class”属性进行类型检查
    【解决方案2】:

    您也可以在 MainWindow 的构造函数中定义绑定,如下所示:

    public MainWindow()
    {
        InitializeComponent();
        SetBinding(MyDPProperty, "MyVMProperty");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-06
      • 1970-01-01
      • 2019-07-27
      • 2013-01-20
      • 2012-02-17
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多