2016-04-18 7 views
0

Обзор: Я связал свойство IsEnabled свойства кнопки bool в связанной модели.Как установить логический флаг на основе нескольких вариантов свойств?

В текущей настройке пользовательского интерфейса по IsValidTagRequest должен быть установлен в истинную если все три свойства есть выбор, то есть RaisePropertyChanged() сработал в каждом инкубаторе.

То, что я действительно пытался это установка личного Его _isValidTagRequest истины после RaisePropertyChanged() каждого из требуемых свойств - RegNumber, SelectedZone, SelectedParkDuration.

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

Вопрос: Кто-нибудь знает, как я могу проверить, что несколько свойств были изменены, прежде чем включить свойство bool в значение true?

BOOL proeprty определяется следующим образом, а затем каждый из требуемых свойств, которые должны изменить до IsEnabled устанавливается истина:

private bool isValidTagRequest = false; 
    public bool IsValidTagRequest 
    { 
     get { return isValidTagRequest; } 
     set 
     { 
      if (value != isValidTagRequest) 
      {    
       isValidTagRequest = value; 
       RaisePropertyChanged("IsValidTagRequest"); 
      } 

     } 

    } 

Три свойства - RegNumber, SelectedZone, SelectedParkDuration:

private string _regNumber; 
    public string RegNumber 
    { 
     get 
     { 
      return this._regNumber; 
     } 

     set 
     { 
      if (_regNumber != value) 
      { 
       _regNumber = value; 
       RaisePropertyChanged("RegNumber"); 
      } 
     } 
    } 

    private ZoneInfo _selectedZone; 
    public ZoneInfo SelectedZone 
    { 
     get 
     { 
      return this._selectedZone; 
     } 

     set 
     { 
      if (_selectedZone != value) 
      { 
       _selectedZone = value; 
       RaisePropertyChanged("SelectedZone"); 
      } 
     } 
    } 


    private TimeSpan? _selectedParkDuration = TimeSpan.Parse("00:00"); 
    public TimeSpan? SelectedParkDuration 
    { 
     get 
     { 
      return this._selectedParkDuration; 
     } 

     set 
     { 
      if (_selectedParkDuration != value) 
      { 
       _selectedParkDuration = value; 
       RaisePropertyChanged("SelectedParkDuration"); 
      } 
     } 
    } 

И для контекста привязка в XAML определяется следующим образом:

<Button Grid.Row="3" 
        Grid.Column="1" 
        Width="200" 
        Height="100" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Bottom" 
        Command="{Binding TagRequestCommand}" 
        Content="Send" 
        IsEnabled="{Binding IsValidTagRequest, 
             Mode=TwoWay}" 
        Style="{StaticResource CustomButtonStyle}" /> 

ответ

1

Например, вы можете вызвать RaisePropertyChanged («IsValidTagRequest»); в конце каждого сеттера из ваших 3 свойств. Итак, когда задано одно из свойств тезисов, привязка IsValidTag будет переоценена. Хотя вы должны обновить код добытчика «IsValidTagRequest» вернуть комбинацию из 3-х свойств, что-то вроде:

public bool IsValidTagRequest 
{ 
    get { return SelectedParkDuration != null && SelectedZone != 0 & RegNumber != "" }; 
} 

Пожалуйста, отметьте, как ответ, если это помогает, спасибо Stephanie