我有一个全局变量,表明我的应用程序是否处于只读模式
git checkout-index
现在我想在我的所有GUI中听一下关闭编辑。例如,我有一个DataGrid
public static class Global
{
public static event PropertyChangedEventHandler StaticPropertyChanged;
private static void OnStaticPropertyChanged(string propertyName)
{
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
private static bool _isReadOnly = false;
public static bool IsReadOnly
{
get { return _isReadOnly; }
set
{
_isReadOnly = value;
OnStaticPropertyChanged("IsReadOnly");
}
}
}
如何在ViewModel中侦听全局变量而不是本地变量?目前我收到错误消息
命名空间名称Global不存在于名称空间Models中。
但确实如此!我已经尝试重新编译并重新启动VS。
答案 0 :(得分:3)
您可以使用单例实现,而不是使用静态属性。比你有一个实例,可以实现INotifyPropertyChanged
:
public class Global : INotifyPropertyChanged
{
private Global() { }
public Global Instance { get; } = new Global();
private bool _isReadOnly;
public bool IsReadOnly
{
get => _isReadOnly;
set
{
if (_isReadOnly != value)
{
_isReadOnly = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(IsReadOnly)));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
然后你就可以使用它:
<DataGrid IsReadOnly="{Binding Source={x:Static local:Global.Instance}, Path=IsReadOnly}" />
正如Clemens在评论中所提到的,自.Net 4.5以来,有一个静态的PropertyChanged事件也适用于静态属性:
public static event PropertyChangedEventHandler StaticPropertyChanged;