将派生文本框的“文本属性”绑定到另一个文本框不起作用

时间:2010-03-17 14:29:43

标签: silverlight binding silverlight-4.0

我有一个类'MyTextBox',它派生自Silverlight中的默认TextBox。此类目前不包含其他代码。

我在xaml中设置了一个绑定,将MyTextbox的Text-Property绑定到另一个Textbox,以反映Textbox中的输入。结果是MyTextBox没有更新,也没有显示其他文本框的文本。

附加我对普通文本框进行了相同的绑定。这很有效。

这是绑定的XAML。

<UserControl x:Class="Silverlight.Sample.Dummy"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:my="clr-namespace:Sample"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<StackPanel x:Name="LayoutRoot" Background="White">
    <TextBox Height="23" x:Name="textBox2"  Width="120" />
    <TextBox Text="{Binding ElementName=textBox2, Path=Text, Mode=TwoWay}" Width="120" />
    <my:NumberTextBox Width="120" Text="{Binding ElementName=textBox2, Path=Text, Mode=OneWay}" />
</StackPanel>

当我从控件派生时,是否有特殊的东西可以设置为绑定。

PS:我尝试使用INotifyPropertyChanged绑定到虚拟对象,并将其设置为现有Textboxes的DataContext。此测试按预期工作,我的派生文本框得到更新。

2 个答案:

答案 0 :(得分:1)

Jehof,

首先,在派生的my:NumberTextBox的Text属性上使用TwoWay绑定。

如果仍无法解决问题,请继续...

my:NumberTextBox类实际上是从TextBox派生的吗?如果是这样,你不应该做任何其他事情。如果要构建自己的控件,并在my:NumberTextBox类中实现Text属性,请尝试将其设置为DependencyProperty以允许TwoWay绑定。举个例子:

    // The Text dependency property
    #region The Text dependency property
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(NumberTextBox),
        null);

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
    #endregion
祝你好运, 吉姆麦克库迪 面对面软件和YinYangMoney

答案 1 :(得分:0)

最后,我找到了原因,为什么它不起作用。

我犯了错误,我在我的项目中添加了一个新的Silverlight用户控件(MyTextBox),并将基类从UserControl更改为TextBox(使用相应的Xaml-File)。在这种情况下,绑定不起作用。

在我将一个普通的类添加到我的项目并从TextBox派生后,绑定工作没有任何问题。