簡體   English   中英

將ViewModel屬性綁定到視圖

[英]Binding ViewModel property to a View

我有以下內容(頁面的基類和viewmodel類):

  public class MySuperPage : Page {
      public MySuperPageViewModel VM = new MySuperPageViewModel();

      ..........
      ..........

      public class MySuperPageViewModel {
        protected bool _ShowProgress = false;
        public bool ShowProgress {
            get { return _ShowProgress; }
            set {
                _ShowProgress = value;
                OnPropertyChanged("ShowProgress");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string property) {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
      }
  }

然后是實際頁面

  public class MyPage : MySuperPage(){
      public MyPage() : base() {
          this.InitializeComponent();
      }
  }

XAML如下:

  <my:MySuperPage
xmlns:my="using:MyNamespace"
x:Name="pageRoot"
x:Class="MyPages.MyPage"
DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
....>

     <ProgressRing IsActive="{Binding VM.ShowProgress, ElementName=pageRoot}" ... />

如果在后台代碼中,我執行以下操作

this.VM.ShowProgress = true; // or false

效果不明顯。

相反,如果我將對象'VM'分配給DefaultViewModel(這是一個ObservableCollection),事情就可以解決:

 this.DefaultViewModel["VM"] = VM;

即,在最后一種情況下,使用{Binding DefaultViewModel.VM.ShowProgress,ElementName = pageRoot}我設法使進度環反映VM實例的狀態。

我想念一些東西。

您頁面中的ViewModel必須實現為屬性才能使綁定工作。 更改

public MySuperPageViewModel VM = new MySuperPageViewModel();

private MySuperPageViewModel _vm = new MySuperPageViewModel();
public MySuperPageViewModel VM { get { return _vm; }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM