网格上的可见性绑定不起作用

Visibility binding on grid not working

我正在尝试绑定网格的可见性但无法这样做。

//ViewModel Class
 private Visibility _isVisiblePane = Visibility.Hidden;
        public Visibility isVisiblePane { 
            get
            {
                return _isVisiblePane;
            }
            set
            {

                _isVisiblePane = value;
                RaisePropertyChanged(() => "isVisiblePane");
            }
        }
//xaml code
<Grid Visibility="{Binding Path=isVisiblePane}">
....My Content....
</Grid>

调试时,程序将值设置为隐藏,但当我更改 _isVisiblePane 的可见性时,它不会更新 GUI 中的可见性(网格保持隐藏,而 _isVisiblePane 值可见)。

//in some function => on button click, value of _isVisiblePane updates to Visible but grid remains hidden.
     isVisiblePane = isLastActiveDoc() == true ? Visibility.Visible : Visibility.Hidden;

错误!在 RaisePropertyChanged("isVisiblePane") 行。好像没有 属性 这个名字 "An exception of type 'System.ArgumentException' occurred in GalaSoft.MvvmLight.dll but was not handled in user code"

PS:我也尝试过使用 bool 的 IValueConverter 方法。仍然没有弄清楚问题出在哪里。有帮助吗?

没有真正回答,但是:

  • 恕我直言,您不应该在 ViewModel 中使用 Visibility 枚举。看,ViewModels 应该与视图技术本身无关(例如,意识到 INotifyPropertyChanged 不是 WPF 库的一部分)。因此,改为绑定到布尔值并使用 converter.
  • .NET 中的公共属性通常遵循 Pascal 大小写,因此,我建议将 isVisiblePane 更改为 IsPaneVisible
  • 仔细检查您的视图的 DataContext。
  • 运行 项目处于调试模式并观察控制台以获取有关绑定的消息。
  • 确保您的 ViewModel class 实现了 INotifyPropertyChanged。
  • 确保 RaisePropertyChanged 最终在正确的线程上下文中调用 PropertyChanged 如果您的视图也是您的 UI。

    public event PropertyChangedEventHandler PropertyChanged;
    
    private void RaisePropertyChanged(String info)
    {
        if (PropertyChanged != null)            
            PropertyChanged(this, new PropertyChangedEventArgs(info));            
    }
    
  • 确保网格将您的虚拟机作为其数据上下文,或者为您的绑定指定正确的源。

  • 确保 RaisePropertyChanged 通过

    绑定了任何东西

    if(RaisePropertyChanged != null) RaisePropertyChanged (....)

w=10=sh w=13=SHI.e. w=12=st w=11=sh