无法成功将 IsVisible 动态绑定到静态字段
Posted
技术标签:
【中文标题】无法成功将 IsVisible 动态绑定到静态字段【英文标题】:Unable to successfully dynamically bind IsVisible to static field 【发布时间】:2021-09-29 07:29:21 【问题描述】:我正在尝试做类似于Binding to static class property 的事情。我想将多个控件的 IsVisible 属性绑定到单个静态布尔值(这样我就可以使用单个 C# 语句使它们全部出现和消失)。
这是我的其中一个控件的 XAML:
<Label Grid.Row="3" x:Name="LabelDireWarning" Grid.ColumnSpan="2" TextColor="Red" FontAttributes="Bold" HorizontalTextAlignment="Center"
IsVisible="Binding Source=x:Static local:State.IsChangingPassword"
Text="blah blah."/>
这是字段:
public static class State
public static bool IsChangingPassword = true;
etc.
我有一个切换IsChangingPassword
的测试按钮,但控件的可见性没有改变。
我猜这与“PropertyChanged
事件的引发”有关,但我不知道该怎么办。
【问题讨论】:
只能绑定公共属性,不能绑定字段public bool IsChangingPassword get; set; = true;
并且,如果你想在运行时动态更新你需要实现 INotifyPropertyChanged
与字段(而不是属性)的静态绑定工作得很好(除了关系是“一次性的”)。
【参考方案1】:
这是WPF 4.5
中的新功能之一,它支持绑定到静态属性。它可能不适用于Xamarin.Forms
。
正如Jason所说,如果你想在rutime动态更新,你需要实现INotifyPropertyChanged
。但是在表单中,静态类无法实现接口。
所以你应该做一些改变:
public static class State
private static Status g_Current = new Status();
public static Status Current
get
return g_Current;
public class Status :INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private bool _isChangingPassword = true;
public bool IsChangingPassword
get return _isChangingPassword;
set
if (value != _isChangingPassword)
_isChangingPassword = value;
NotifyPropertyChanged("IsChangingPassword");
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
在您的 xaml 中:
<Label Grid.Row="3" x:Name="LabelDireWarning" Grid.ColumnSpan="2" TextColor="Red" FontAttributes="Bold" HorizontalTextAlignment="Center"
IsVisible="Binding Source=x:Static local:State.Current, Path=IsChangingPassword"
Text="blah blah."/>
那么当您可以更改代码隐藏中的IsChangingPassword
时:
State.Current.IsChangingPassword = false;
【讨论】:
以上是关于无法成功将 IsVisible 动态绑定到静态字段的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin iOS - XAML IsVisible 绑定在 ItemsSource 更改时不会更新
wpf 数据绑定 IsVisible 到 TabControl.SelectedItem != null
如何使用 Isvisible Property 的绑定方法?