加载数据时,我想隐藏WPF控件(全部包含在网格中)的内容并显示加载trobber。Grid上的WPF中的Visiblity绑定
MainWindow.xaml:
<Grid Visibility="{Binding IsContentVisible}">
<!-- MyCustomView is hosted here -->
</Grid>
主窗口的数据上下文是MainWindowViewModel
,这也从ViewModelBase
public class MainWindowViewModel : ViewModelBase
{}
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:
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:
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); }
}
}
和repository.LoadData():
Thread.Sleep(2500);
return "some text";
LoadData()被调用作为一个按钮的命令
我在做什么错?如果将可见性绑定到MyCustomView
的网格上,它可以工作,但这不是解决方案,因为我有很多视图,而我只想要在一个地方绑定MainWindow
。
最可能的是IsContentVisible setter没有引发属性更改的事件。 – MajkeloDev
@MajkeloDev嘿,只是调试,它是。在LoadData()方法中正确提升事件两次 – Mefhisto1
这很奇怪。尝试把这个网格而不是将用户控制的测试里面一些虚拟的文本块什么的,所以你现在如果是IsContentVisible财产的问题,或者是相关的托管用户的一个问题控制 – MajkeloDev