Двухстороннее связывание данных Silverlight - PullRequest
0 голосов
/ 18 августа 2011

У меня есть сетка данных, в которой один из столбцов является элементом управления Textbox, для привязки установлено значение twoway сетка привязана к наблюдаемой коллекции. Проблема: если я введу какое-либо значение в текстовое поле, коллекция будет заполнена. Теперь, если я очищаю это текстовое поле, то же самое не отражается в коллекции. моя привязанная собственность имеет значение nullable.

Спасибо N Заранее

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Проверьте окно вывода в Visual Studio на наличие ошибок привязки.Вы должны увидеть предупреждение об отсутствии неявного преобразования из пустой строки в целое число.

Вы можете использовать ValueConverter для выполнения этой задачи.

См. Этот связанный вопрос для других подходов.Обратите внимание, что некоторые из них могут не применяться, поскольку в фокусе присутствует WPF.

Привязка WPF не работает должным образом со свойствами типа int

0 голосов
/ 18 августа 2011

Я не уверен, где именно может быть ваша проблема, но я попробовал следующее, и все работает как положено:

У меня есть простой класс Person:

public class Person : ObservableObject
{
    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            if (name == value)
                return;
            name = value;
            RaisePropertyChanged(() => Name);
        }
    }

    private int? age;
    public int? Age
    {
        get { return age; }
        set
        {
            if (age == value)
                return;
            age = value;
            RaisePropertyChanged(() => Age);
        }
    }
}

У меня также есть простая модель представления с ObservableCollection<Person>, которая называется Data. Ответ, вот мой XAML:

<sdk:DataGrid Name="dataGrid" ItemsSource="{Binding Data}" AutoGenerateColumns="False"
              SelectedItem="{Binding SelectedPerson, Mode=TwoWay}" Grid.Row="1">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}"/>
        <sdk:DataGridTextColumn Binding="{Binding Age, Mode=TwoWay}"/>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

Я проверил, как это работает, установив точку останова в Setter для моего свойства Age, и оно показывает значение, поступающее как null

Надеюсь, это поможет;)

0 голосов
/ 18 августа 2011

Вы можете использовать

<TextBox IsReadOnly="True" Text="{Binding BUApprovalQty, Mode=TwoWay, TargetNullValue=''}"></TextBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...