将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必须作为一个属性实现才能使绑定工作。把
public MySuperPageViewModel VM = new MySuperPageViewModel();
private MySuperPageViewModel _vm = new MySuperPageViewModel();
public MySuperPageViewModel VM { get { return _vm; }}