2016-10-05 2 views
0

Я работаю с WPF с использованием Prism (MVVM). Я хотел установить visibililty из StackPanel из cвалов ViewModel. ВИДИМОСТЬ StackPanel является переплетены как:Видимость StackPanel в MVVM

<StackPanel x:Name="spVisibility" Orientation="Horizontal" 
      Visibility="{Binding spVisibility, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 

Я вид модели класса, как:

public class SearchId : BindableBase, INotifyPropertyChanged 
    { 
     private Visibility _visibility = Visibility.Collapsed; 

     private DelegateCommand<object> searchCommand; 

     public event PropertyChangedEventHandler PropertyChanged; 

     public SearchId() 
     { 
      searchCommand = new DelegateCommand<object>(this.SearchData); 
     }/// 

     public Visibility spVisibility 
     { 
      get { return _visibility; } 
      set 
      { 
       if (!string.Equals(_visibility, value)) 
       { 
        _visibility = value; 
        RaisePropertyChanged("spVisibility"); 
       } 
      } 
     } 

     private void RaisePropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, 
       new PropertyChangedEventArgs (propertyName)); 
      } 

     } 

     private async void SearchData(object parameter) 
     { 
      _visibility = Visibility.Visible; 
     } 
    } 

Но это не работает. Пожалуйста, помогите мне.

ответ

2

_visibility = Visibility.Visible устанавливает частную собственность вместо того, чтобы использовать публичный так RaisePropertyChanged("spVisibility") идет обход. Вам нужно использовать spVisibility = Visibility.Visible.

+0

Очень хорошо объяснил. Спасибо, работал. – agileDev

1

Если вы используете MVVM, я бы рекомендовал использовать значение Boolean вместо Visibility. Вся цель MVVM - разделение View Logic от DataLogic.

Просмотр логика:

<StackPanel Orientation="Horizontal" 
     Visibility="{Binding ShowStackPanel, Converter={StaticResource BooleanToVisibilityConverter}}"> 

Используйте конвертер для преобразования boolan к видимости собственности .. BooleanToVisibilityConverter является частью .NET и можно ссылаться без определения его вручную в XAML.

public class SearchId : BindableBase, INotifyPropertyChanged 
{ 
    private bool _showStackPanel; 

    private DelegateCommand<object> searchCommand; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public SearchByIDVM() 
    { 
     searchCommand = new DelegateCommand<object>(this.SearchData); 
    }/// 

    public bool ShowStackPanel 
    { 
     get { return _showStackPanel; } 
     set 
     { 
      if (!Equals(_showStackPanel, value)) 
      { 
       _showStackPanel= value; 
       RaisePropertyChanged("ShowStackPanel"); 
      } 
     } 
    } 

    private void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, 
      new PropertyChangedEventArgs (propertyName)); 
     } 

    } 

    private async void SearchData(object parameter) 
    { 
     ShowStackPanel= true; 
    } 

}

Смежные вопросы