将属性绑定到独立于DataContext的Silverlight依赖项属性

将属性绑定到独立于DataContext的Silverlight依赖项属性,silverlight,silverlight-4.0,wcf-binding,Silverlight,Silverlight 4.0,Wcf Binding,我试图创建一个地址控件,该控件具有IsReadOnly属性,当设置为true时,该属性将使内部的每个文本框均为只读 <my:AddressControl Grid.Column="1" Margin="5" IsReadOnly="True"/> 在这个代码隐藏文件的XAML中,我为每个地址行设置了一个文本框: <TextBox IsReadOnly="{Binding IsReadOnly}" Text="{Binding City, Mode=TwoWay}"/&g

我试图创建一个
地址
控件,该控件具有
IsReadOnly
属性,当设置为true时,该属性将使内部的每个
文本框
均为只读

 <my:AddressControl Grid.Column="1" Margin="5" IsReadOnly="True"/>
在这个代码隐藏文件的XAML中,我为每个地址行设置了一个
文本框

  <TextBox IsReadOnly="{Binding IsReadOnly}" Text="{Binding City, Mode=TwoWay}"/>
  <TextBox IsReadOnly="{Binding IsReadOnly}" Text="{Binding State, Mode=TwoWay}"/>
  <TextBox IsReadOnly="{Binding IsReadOnly}" Text="{Binding Zip, Mode=TwoWay}"/>
问题是,只要我将
DataContext
设置为
'this'
之外的其他内容,
的绑定就中断了。这并不奇怪,因为它在
地址
数据实体上查找
是只读的
,并且它不存在或不属于该实体

我尝试了几乎所有的组合,以使
IsReadOnly
绑定到
AddressControl
obejct,但无法使其工作

我尝试过类似的方法,但我无法让
IsReadOnly
独立绑定到
AddressControl
属性,而不是它的
DataContext

<TextBox IsReadOnly="{Binding RelativeSource={RelativeSource Self}, Path=IsReadOnlyProperty}" Text="{Binding City, Mode=TwoWay}" />


我想我已经很接近了。我做错了什么?

如果你想通过绑定来实现这一点,我想你至少被卡住了。我的猜测是,您将不得不求助于代码隐藏,大概是通过迭代子textbox控件并将其IsReadOnly属性设置为Address控件IsReadOnly属性的副作用


不像有些人认为任何代码放在代码隐藏文件中都是对失败的承认,我对此并不虔诚:如果把一些代码扔进代码隐藏是做某事的最简单方法,那就是我把代码放在那里的地方。相反,如果我不得不花半天的时间试图找出如何通过绑定来完成某件事,而我可以在五分钟内用一段代码完成,那就是失败,我想,如果你想通过绑定来完成这件事,至少你会被卡住。我的猜测是,您将不得不求助于代码隐藏,大概是通过迭代子textbox控件并将其IsReadOnly属性设置为Address控件IsReadOnly属性的副作用

不像有些人认为任何代码放在代码隐藏文件中都是对失败的承认,我对此并不虔诚:如果把一些代码扔进代码隐藏是做某事的最简单方法,那就是我把代码放在那里的地方。相反,如果我不得不花半天的时间试图找出如何通过绑定来完成某件事,而我可以在五分钟内用一个代码完成,那就是失败,我想。

(实际上我自己对一个类似问题的回答)我有一个好的[更好的]解决方案

我仍然需要遍历文本框,但不必设置实际值。我可以在codebehind中创建绑定,但不能使用XAML。

(实际上我自己对一个类似问题的回答)我有一个好的[更好的]解决方案


我仍然需要遍历文本框,但不必设置实际值。我可以在codebehind中创建绑定,但不能使用XAML。

在使用了“Text”属性的绑定工具之后,似乎“relativesourceself”实际上意味着绑定到文本框本身,这不是我想要的。因此,我认为我需要在Silverlight中尚不存在的FindanceStore:-(我认为我被卡住了?在使用了“文本”属性的绑定工具之后,似乎“RelativeSource Self”实际上意味着绑定到文本框本身-这不是我想要的。因此,我认为我需要在Silverlight中尚不存在的FindanceStore:-(我想我被卡住了?如果我被卡住了,我会发现-只是不想错过一些东西。这些学习经验可以帮助你更好地理解框架,即使你一开始确实浪费了一些时间。肯定同意事情背后的代码-如果我被卡住了,请参阅我的帖子我会发现-只是不想错过一些东西。这些这种学习经验可以帮助你更好地理解框架,即使你一开始肯定会浪费一些时间。肯定会同意事情背后的代码-看我的帖子,就像说这是正确的方法,标记的答案是错误的-这是可能的,你不会被卡住。哦,是的,我刚刚意识到这是错误的我的问题是,我可以改变答案。我想ken的意思是,你不能仅仅用XAML绑定来做这件事——但幸运的是,在代码中创建一个绑定是可能的,就像说这是正确的方法,标记的答案是错误的一样——这是可能的,你没有被卡住。哦,是的,我刚刚意识到这是我的问题,所以我可以改变它我认为ken的意思是,您不能仅使用XAML绑定来实现这一点,但幸运的是,可以在代码中创建绑定
 <my:AddressControl DataContext="{Binding ShippingAddress, Mode=TwoWay}" IsReadOnly="True">
 <my:AddressControl DataContext="{Binding BillingAddress, Mode=TwoWay}" IsReadOnly="True">
<TextBox IsReadOnly="{Binding RelativeSource={RelativeSource Self}, Path=IsReadOnlyProperty}" Text="{Binding City, Mode=TwoWay}" />