[英]Visiblity binding in WPF on a Grid
While the data is loading, I want to hide the content of the WPF control (which is all contained in a grid) and display a loading trobber. 加载数据时,我想隐藏WPF控件的内容(全部包含在网格中)并显示加载麻烦。
MainWindow.xaml: MainWindow.xaml:
<Grid Visibility="{Binding IsContentVisible}">
<!-- MyCustomView is hosted here -->
</Grid>
The data context of MainWindow is MainWindowViewModel
, which also derives from ViewModelBase
MainWindow的数据上下文是
MainWindowViewModel
,它也是从ViewModelBase
派生的
public class MainWindowViewModel : ViewModelBase
{}
MyCustomView.xaml: MyCustomView.xaml:
<Grid>
<TextBox Text="{Binding Data}" />
<TextBlock>This shouldn't be visible during the 2.5 sec loading time, but it is!</TextBlock>
</Grid>
MyCustomViewModel.cs: MyCustomViewModel.cs:
public class MyCustomViewModel : ViewModelBase
{
public async void LoadData()
{
IsContentVisible = Visibility.Hidden;
OnPropertyChanged("IsContentVisible");
// Display loading.gif
Data = await repository.LoadData();
// Hide loading.gif
IsContentVisible = Visibility.Visible;
OnPropertyChanged("IsContentVisible");
}
}
ViewModelBase.cs: ViewModelBase.cs:
public class ViewModelBase : INotifyPropertyChanged
{
private Visbility isContentVisible = Visibility.Visible;
public Visbility IsContentVisible
{
get { return isContentVisible; }
set { isContentVisible = value; }
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private ViewModelBase currentViewModel;
public ViewModelBase CurrentViewModel
{
get { return currentViewModel; }
set { SetProperty(ref currentViewModel, value); }
}
}
and repository.LoadData(): 和repository.LoadData():
Thread.Sleep(2500);
return "some text";
LoadData() is called as a command of a button LoadData()被称为按钮命令
What am I doing wrong? 我究竟做错了什么? If bind visiblity to the grid of the
MyCustomView
it works, but that's not the solution, since I'd have many views, and I only want to have binding in one place, the MainWindow
. 如果将可见性绑定到
MyCustomView
的网格,则可以工作,但这不是解决方案,因为我有很多视图,并且我只想在一个位置绑定MainWindow
。
Have you tried this? 你有尝试过吗?
private Visbility isContentVisible = Visibility.Visible;
public Visbility IsContentVisible
{
get { return isContentVisible; }
set
{
isContentVisible = value;
OnPropertyChanged("IsContentVisible");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.