【问题标题】:How do I bind the value of a dependency property in the UserControl it's defined in XAML?如何在 XAML 中定义的 UserControl 中绑定依赖属性的值?
【发布时间】:2012-11-07 05:54:44
【问题描述】:

假设我有一个将 DataContext 设置为它的 VM 的 UserControl

现在假设 UserControl 定义了一个依赖属性,我想最初绑定到 ViewModel 上的一个属性...如果顶级元素是 UserControl,我将如何在 UserControl 的 XAML 中引用此属性?

<UserControl x:Class="TestApp1.TestControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TestApp1"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300" x:Name="test">

</UserControl>

依赖属性:

    public static readonly DependencyProperty MyTestPropProperty= null;

    public string MyTestProp
    {
        get { return (string)GetValue(MyTestPropProperty); }
        set { SetValue(MyTestPropProperty, value); }
    }

    static TestControl()
    {
        MyTestPropProperty= DependencyProperty.Register(
            "MyTestProp",
            typeof(string), 
            typeof(TestControl), 
            new FrameworkPropertyMetadata());
    }

在 XAML 上,我希望能够使用 MyTestProp={Binding yadda yadda},但我无法从 XAML 中引用它

【问题讨论】:

    标签: wpf


    【解决方案1】:

    只需像这样在根节点中添加属性:

    <Usercontrol xmlns=blablabla MyProperty="{Binding MyViewModelProperty}">

    编辑:这不起作用,因为没有对新创建的属性的 XAML 引用。使用&lt;Style TargetType="TestControl"&gt; 或从外部上下文(包含此用户控件的上下文)设置属性

    【讨论】:

    • 我不能,因为设计器无法识别“MyProperty”,因为根项在技术上是 UserControl,而“MyProperty”是在我的 UserControl 派生代码隐藏类中定义的
    • 天啊,你为什么要使用设计器?只需在 XAML 中手动编写即可。此外,为了使其工作,您的属性必须是 DependencyProperty,而不是常规的 clr 属性。常规属性不可绑定
    • 抱歉,不是 XAML 编辑器的设计者(我将这两个术语互换使用是我的错),我定义的这个属性是一个依赖属性,但问题在于 XAML 编辑器中的 UserControl 是顶级元素。我的 UserControl 是一个派生类,因此该属性不在 XAML 编辑器的范围内
    • 我不认为它是这样工作的......你在根节点中定义了 x:Class 属性吗?发布您的代码,以便我更好地理解
    • 有些东西我不明白.. 您的 XAML 将类名定义为 TestApp1.TestControl,但是您有一个 static FilterControl() ctor... 正确的名称是什么?
    猜你喜欢
    • 2017-12-18
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2014-08-31
    • 1970-01-01
    • 2012-05-19
    相关资源
    最近更新 更多