Установите значение null для свойства в mvvm WPF, если в текстовом поле ничего не заполнено. - PullRequest
2 голосов
/ 02 мая 2011

Я реализовал текстовое поле, и это привязывается к модели представления.Например, я заполняю текстовое поле по умолчанию на «100», но если я изменяю это значение на 10, свойство всегда устанавливается правильно.Но когда я удаляю все числа, я хочу, чтобы свойство было установлено в нуль.Но он не устанавливает значение, когда ничего не заполнено. Он просто сохраняет последнее значение ..

это мой код, viewmodel + xaml:

public double MaxTime
{
    get
    {
        return maxTime;
    }
    set
    {
        maxTime = value;
        OnPropertyChanged("MaxTime");
        if (SelectedQuestionDropList != null)
        {
            foreach (QuestionCluster cluster in this.Examination.QuestionClusters)
            {
                if (cluster == SelectedQuestionDropList)
                {
                    cluster.MaxTime = value;
                }
            }
        }
    }
}


<TextBox Height="23" 
         Visibility="{Binding Path=VisibleClusterDetails, Converter={StaticResource boolToVis},UpdateSourceTrigger=PropertyChanged}"  
         Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
         HorizontalAlignment="Right" Margin="0,511,601,0" Name="textBox2" 
         VerticalAlignment="Top" Width="120" /> 

Ответы [ 3 ]

8 голосов
/ 02 мая 2011

Это обязательная проблема, вы должны сделать три вещи

1) импортировать пространство имен системы в ваш файл xaml (обратите внимание на ключевое слово sys):

xmlns:sys="clr-namespace:System;assembly=mscorlib"

2)Затем в привязке необходимо указать, чтобы он отправлял нулевое значение, когда значение в текстовом поле равно string.Empty (это значение, когда в текстовом поле ничего нет, поэтому оно не будет работать, поскольку string.Empty не может преобразоватьв два раза).Сделав это:

<TextBox Text={Binding MaxTime,TargetNullValue={x:Static sys:String.Empty}}/>

3) Измените свойство ViewModel MaxTime на тип double?

3 голосов
/ 02 мая 2011

Свойство не может быть установлено в ноль, потому что double не может быть пустым.Попробуйте использовать double? вместо.

2 голосов
/ 02 мая 2011

Ваше свойство является двойным, поэтому оно не поддерживает нулевые или пустые значения.

Вместо того, чтобы использовать здесь double, я бы выставил свойство как строку и конвертировал между строкой и double в моих свойствах get и setter.В установщике я мог обрабатывать нулевые или пустые значения, как я хотел, и я мог легко обрабатывать любое специальное форматирование, которое было необходимо.

...