2016-05-15 15 views
1

Gibt es eine Möglichkeit, Abhängigkeitseigenschaft in Viewmodel zu deklarieren? Ich möchte eine Abhängigkeitseigenschaft innerhalb von Viewmodel deklarieren und den Wert über den Befehl ändern.Abhängigkeitseigenschaft in Viewmodel in Prism

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; 
     } 
    } 

Problem ist, ich bin einige Übersetzungsfehler in IsPaneVisible‘Getter/Setter bekommen: "GetValue existiert nicht im aktuellen Kontext". Gibt es einen alternativen Weg, dies zu tun?

+0

Warum muss es eine Abhängigkeitseigenschaft sein? Eine reguläre Eigenschaft sollte im Ansichtsmodell ausreichen. – Haukinger

+0

Ich habe zwei Visual States und ich wollte zwischen diesen Zuständen basierend auf einem Dependency-Eigenschaftswert mit einem Data-Trigger-Verhalten wechseln. Ich dachte, Invoke-Befehlsaktion zu verwenden, die den Wert der Abhängigkeitseigenschaft ändern wird und somit zwischen Status wechselt – siam

Antwort

0

Ein DependencyProperty wird auf einem DependencyObject verwendet, ein Beispiel dafür ist ein UserControl. Prisms ViewModelBase ist kein DependencyObject, hauptsächlich weil dieser Typ plattformspezifisch ist. Um die Bindung von einem Ansichtsmodell zu unterstützen, verwenden wir typischerweise INotifyPropertyChanged.

Prism implementiert diese Schnittstelle in der Basisklasse BindableBase, von der ViewModelBase ebenfalls abgeleitet wird. Sie definieren Ihre Eigenschaften wie folgt aus:

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

Wenn Sie das Prism Template Pack Visual Studio-Erweiterung zu installieren, können Sie den propp Codeausschnitt verwenden.

Verwandte Themen