将ViewModel属性绑定到视图

本文关键字:视图 绑定 属性 ViewModel | 更新日期: 2023-09-27 18:04:52

我有以下(一个基类的页面和一个视图模型类):

  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属性绑定到视图

你的页面中的ViewModel必须作为一个属性实现才能使绑定工作。把

public MySuperPageViewModel VM = new MySuperPageViewModel();

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