绑定'IsReadOnly'依赖属性

时间:2012-08-03 10:38:22

标签: wpf data-binding dependency-properties

我尝试创建一个依赖属性'IsReadOnly',以便在某些事件后自动将我的表单中的所有TextBox设置为ReadOnly。

该属性在我的窗口后面的代码中设置了文本框,如下所示:

public static readonly DependencyProperty IsReadOnlyProperty =   
        DependencyProperty.Register("IsReadOnly",
        typeof(bool), 
        typeof(MainWindow), 
        new PropertyMetadata()); 

public bool IsReadOnly
{
  get { return (bool)GetValue(IsReadOnlyProperty); }
  set { SetValue(IsReadOnlyProperty, value);       }
}

文本框的Xaml代码与此类似:

<TextBox Text="{numBind:NumericFormatBinding Path=BudgetStatement.OpExpTotalByFunction}"
                   IsReadOnly="{Binding Path=IsReadOnly,
                RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType=Window}, 
                   Mode=TwoWay}" 
         Name="txtOpExpByProgram" />

但它不起作用。我仍然可以在文本框中编辑值。我收到以下输出错误: System.Windows.Data Error: 40 : BindingExpression path error: 'IsReadOnly' property not found on 'object' ''ListCollectionView' (HashCode=54963679)'. BindingExpression:Path=IsReadOnly; DataItem='ListCollectionView' (HashCode=54963679); target element is 'TextBox' (Name=''); target property is 'IsReadOnly' (type 'Boolean') 我不太了解wpf来正确理解这个错误,但它似乎与ListCollectionView有关 - 但我没有尝试将属性附加到ListCollectionView,所以我被卡住了。

谷歌搜索表明它可能是由于DataContext和依赖属性需要特殊处理(http://stackoverflow.com/questions/8497841/dependency-property-and-binding-error),或者PropertyMetaData应该是一个框架(或UI)PropertyMetaData。

有人能指出我正确的方向找出什么不起作用吗?

TIA

亚历

ps:numbind就是在所有文本框中设置stringformat

1 个答案:

答案 0 :(得分:0)

阅读评论后,将所有者类型从MainWindow更改为BudgetMainWindow

public static readonly DependencyProperty IsReadOnlyProperty =   
        DependencyProperty.Register("IsReadOnly",
        typeof(bool), 
        typeof(BudgetMainWindow), 
        new PropertyMetadata());