Устранение неполадок с привязкой данных Silverlight - PullRequest
0 голосов
/ 15 декабря 2011

В этом посте мы расскажем о всех возможных решениях очень распространенной и трудоемкой проблемы в Silverlight, где привязки не работают.

<TextBox Text="{Binding TextValue}"/>

public class ViewModel
{
    // ...
    public string TextValue { get; set; }
    // ...
}

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

Ответы [ 7 ]

0 голосов
/ 15 декабря 2011

Целевое свойство написано плохо или не существует.

В этом случае конвертер не будет вызываться.

0 голосов
/ 15 декабря 2011

Некоторое свойство в пути к целевому свойству или содержащему его классу является нулевым или невидимым.

Содержащая страница или пользовательский элемент управления должны иметь доступ к целевому свойству.Кроме того, если некоторые свойства пути имеют значение NULL, оно молча завершится ошибкой.

Если свойство target имеет значение NULL, TargetNullValue может быть полезным.

0 голосов
/ 15 декабря 2011

Преобразователь плохо связан.

Наиболее распространенный способ связывания преобразователя - статический ресурс.Убедитесь, что имя ключа написано правильно.

<Page.Resources>
    <converters:AValueConverter x:Key="AValueConverter"/>
</Page.Resources>

<TextBox Text="{Binding TextValue, Converter={StaticResource AValueConverter}}"/>
0 голосов
/ 15 декабря 2011

Привязка имеет другой текстовый текст.

Этот пример не будет работать, поскольку шаблон элемента имеет другой текстовый текст:

<ListBox>
    <ListBox.ItemTemplate>
        <TextBox Text="{Binding TextValue}"/>
    </ListBox.ItemTemplate>
</ListBox>
0 голосов
/ 15 декабря 2011

Режим привязки задан неверно.

Пример выше должен быть в режиме TwoWay, если мы хотим обновить свойство TextValue:

<TextBox Text="{Binding TextValue, Mode=TwoWay}"/>

По умолчанию используется режим OneWay, что означает, что содержимое элемента управления будет обновляться при изменении свойства.

0 голосов
/ 15 декабря 2011

Текст данных является нулевым.

Приведенный выше пример никогда не сработает, если текст данных не связан:

public MainPage()
{
    this.DataContext = new ViewModel();
}
0 голосов
/ 15 декабря 2011

Целевой класс не реализует INotifyPropertyChanged.

Класс, содержащий связанное свойство, должен реализовывать INotifyPropertyChanged и вызывать PropertyChanged при изменении значения связанного свойства.

public class ViewModel : INotifyPropertyChanged
{
    //...
    private string textValue;
    public string TextValue
    {
        get { return textValue; }
        set
        {
            textValue = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("TextValue"));
            }
        }
    }
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...