[英]Binding an element in a child View to a property of the parent 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.