WPF:绑定到依赖项属性
我正在学习教程
here.它显示了如何绑定到依赖项属性的基本示例.
<Binding ElementName="This" Path="IPAddress" UpdateSourceTrigger="PropertyChanged"> 其中“This”是当前窗口的名称: <Window x:Class="SOTCBindingValidation.Window1" x:Name="This" 无论何时我尝试做这样的事情,我都会遇到同样的错误: 无法找到引用’ElementName = GridControlControl1’的绑定源. BindingExpression:路径= ip地址;的DataItem = NULL; target元素是’TextBox'(Name =’AddressBox’); target属性是’Text'(类型’String’) 我的代码: <UserControl x:Class="WpfGridtest.GridControl" x:Name="GridControlControl1" ... /> <TextBox x:Name="AddressBox"> <TextBox.Text> <Binding ElementName="GridControlControl1" Path="IPAddress" UpdateSourceTrigger="PropertyChanged"> </Binding> </TextBox.Text> </TextBox> 代码隐藏: partial class GridControl : UserControl public static readonly DependencyProperty IPAddressProperty = DependencyProperty.Register("IPAddress",typeof(string),typeof(GridControl),new UIPropertyMetadata("1.1.1.1")); public string IPAddress { get { return (string)GetValue(IPAddressProperty); } set { SetValue(IPAddressProperty,value); } } 它几乎就像.Net 4.0中发生了变化? 解决方法
这取决于你想要什么.我会尝试提供一个完整的答案.使用这种语法保证更好成功的一种方法是使用VS2010的
XAML Binding Builder,这就是我如何组装您将要看到的语法.
如果您希望UserControl的一个元素显示您的IPAddress依赖项属性(看起来它是正确定义给我的),请在UserControl标记的正文中使用此语法: <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type my:GridControl},AncestorLevel=1},Path=IPAddress}" /> 大多数XAML绑定示例使用此语法而不是更详细的分层XML: <TextBlock> <TextBlock.Text> <Binding Path="IPAddress"> <Binding.RelativeSource> <RelativeSource Mode="FindAncestor" AncestorType="{x:Type my:GridControl}" AncestorLevel="1" /> </Binding.RelativeSource> </Binding> </TextBlock.Text> </TextBlock> …但两种语法都会产生相同的结果.请注意,AncestorType是UserControl的类名,而不是x:在其他标记中使用UserControl时将提供的名称. 假设您在UserControl外部的标记中有一个UI元素,并且您希望访问该另一个控件的DependencyProperty.标记看起来像这样: <my:GridControl x:Name="GridControl1" IPAddress="192.168.1.1" /> <TextBox Text="{Binding ElementName=GridControl1,Path=IPAddress}"/> 或者,或者,这个: <TextBox> <TextBox.Text> <Binding ElementName="GridControl1" Path="IPAddress"/> </TextBox.Text> </TextBox> 请注意,这次您使用的是GridControl的x:Name属性而不是类名,并且您将其称为ElementName,而不是“祖先”.但是,在这两种情况下,Path都是您定义的DependencyProperty的声明名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |