c# - 网格上的可见性绑定(bind)不起作用

标签 c# wpf mvvm-light

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

//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") 行。好像没有这个名字的属性(property) “在 GalaSoft.MvvmLight.dll 中发生了‘System.ArgumentException’类型的异常,但未在用户代码中处理”

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

最佳答案

不是真的回答,但是:

  • 恕我直言,您不应该在 ViewModel 中使用 Visibility 枚举。看,ViewModels 应该与 View 技术本身无关(例如,意识到 INotifyPropertyChanged 不是 WPF 库的一部分)。因此,改为绑定(bind)到 bool 值并使用 converter .
  • .NET 中的公共(public)属性通常遵循 Pascal Casing,因此,我建议将 isVisiblePane 更改为 IsPaneVisible
  • 仔细检查 View 的 DataContext。
  • 在 Debug模式下运行项目并在控制台中查看有关绑定(bind)的消息。

关于c# - 网格上的可见性绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152627/

相关文章:

c# - 是否可以从 MethodBuilder/ConstructorBuilder 调用 DynamicMethod

c# - 在 WPF 应用程序的属性中设置/返回值

c# - WPF 扩展器未扩展

wpf - 将 MergedDictionary 添加到 Application.Resources WPF 时出错

c# - 使用 MVVMLight 时如何设置 Web API DependencyResolver

wpf - 在 View 中使用 DataTemplate 会在 View 和 ViewModel 之间创建耦合吗?

c# - EntityFramework 中的公用表表达式

c# - 如果将字符串引用设置为引号中的字符串,编译器是否会创建额外的字符串?

c# - 如何覆盖 c# 中 List<SomeStruct>() 中每个列表项的序列化名称?

wpf - 在 MediaElement 中重复视频的最简单方法是什么