我正在尝试绑定(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/