简体   繁体   English

WPF在网格上的可见性绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM