2016-05-15 2 views
1

Есть ли способ объявить свойство зависимости внутри viewmodel? Я хочу объявить свойство зависимостей внутри viewmodel и изменить его значение с помощью команды.Свойство зависимости внутри viewmodel в Призме

public class MyViewModel : Prism.Windows.Mvvm.ViewModelBase 
    { 
     public bool IsPaneVisible 
     { 
      get { return (bool)GetValue(IsPaneVisibleProperty); } 
      set { SetValue(IsPaneVisibleProperty, value); } 
     } 

     public static readonly DependencyProperty IsPaneVisibleProperty = 
      DependencyProperty.Register("IsPaneVisible", typeof(bool), typeof(MyViewModel), new PropertyMetadata(0)); 

     public ICommand VisibilityChangeCommand { get; set; } 

     public MyViewModel() 
     { 
      VisibilityChangeCommand = new DelegateCommand(OnVisibilityChange); 
     } 

     private void OnVisibilityChange() 
     { 
      IsPaneVisible = !IsPaneVisible; 
     } 
    } 

Проблема, я получаю ошибку компиляции в IsPaneVisible»геттер/сеттер:„ПолучитьЗначение не существует в текущем контексте“. Есть ли альтернативный способ сделать это?

+0

Почему это должно быть свойство зависимостей? Регулярного свойства должно быть достаточно в модели представления. – Haukinger

+0

У меня есть два визуальных состояния, и я хотел переключиться между этими состояниями на основе значения свойства Dependency с поведением триггера данных. Я думал использовать действие команды Invoke, которое изменит значение свойства зависимостей и, таким образом, переключится между состояниями – siam

ответ

0

A DependencyProperty используется на DependencyObject, примером является UserControl. Prism ViewModelBase не является DependencyObject, главным образом потому, что этот тип является специфичным для платформы. Для поддержки привязки с помощью viewmodel мы обычно используем INotifyPropertyChanged.

Prism реализует этот интерфейс в базовом классе BindableBase, из которого также выводится ViewModelBase. Вы определяете свои свойства, как это:

private string _imagePath; 
public string ImagePath 
{ 
    get { return _imagePath; } 
    set { SetProperty(ref _imagePath, value); } 
} 

Если вы установите расширение Prism Template Pack Visual Studio, вы можете использовать propp фрагмент кода.

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