Привязка «Text-Property» производного текстового поля к другому текстовому полю не работает - PullRequest
3 голосов
/ 17 марта 2010

У меня есть класс MyTextBox, который является производным от стандартного TextBox в Silverlight. Этот класс в настоящее время не содержит дополнительного кода.

Я установил привязку в xaml, чтобы связать Text-свойство MyTextbox с другим 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 и установить его как DataContext для существующих текстовых полей. Этот тест работает, как и ожидалось, и мое производное текстовое поле обновляется.

Ответы [ 2 ]

1 голос
/ 18 марта 2010

Jehof,

Прежде всего, используйте привязку TwoWay для свойства Text вашего производного my: NumberTextBox.

Если это не решит проблему, продолжайте ...

Является ли класс my: NumberTextBox производным от TextBox? Если так, то больше ничего не нужно делать. Если вы создаете свой собственный элемент управления и внедряете свойство Text в свой класс my: NumberTextBox, попробуйте сделать его 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

Удачи, Джим МакКарди Face To Face Software и YinYangMoney

0 голосов
/ 25 марта 2010

Наконец-то я нашел причину, почему это не работает.

Я сделал ошибку, добавив новый пользовательский элемент управления Silverlight (MyTextBox) в свой проект и изменив базовый класс с UserControl на TextBox (с соответствующим Xaml-файлом). В этом случае привязка не работает.

После того, как я добавил нормальный класс в свой проект и извлек его из TextBox, привязка работает без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...