Las*_*zlo 1 c# forms xaml binding xamarin
我有一个静态类(Evp
),位于Models
文件夹中。它有一个Name
字符串,带有 getter 和 setter 以及 aPropertyChangedEventHandler
及其代码:
public static event PropertyChangedEventHandler StaticPropertyChanged;
private static string _name
public static string Name{
get => _name;
set{
_name = value;
OnStaticPropertyChanged("Name"); } }
private static void OnStaticPropertyChanged(string propertyName)
{
StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}
Run Code Online (Sandbox Code Playgroud)
在我的 XAML 文件中,这就是我尝试绑定的方式(如果我没记错的话,它在 WPF 4.5 中有效):
<Label Grid.Row="0" Grid.Column="1" TextColor="Beige" Text="{Binding Source={x:Static Models:Evp.Name}}" HorizontalTextAlignment="Center" VerticalTextAlignment="Center" FontSize="30"></Label>
Run Code Online (Sandbox Code Playgroud)
我Models
在 XAML 中指定了文件夹ContentPage
:
xmlns:Models="clr-namespace:Rdb.Models;assembly=Rdb"
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不起作用。我究竟做错了什么?另外,如何在代码隐藏中设置此绑定?
为了支持数据绑定,您的类必须实现该INotifyPropertyChanged
接口。不幸的是,静态类无法实现接口,因此您的解决方案将不起作用。
解决方案是创建一个实现的普通类INotifyPropertyChanged
,然后创建该类的单例实例,您将其注册为资源:
App.Current.Resources["Evp"] = new Evp();
Run Code Online (Sandbox Code Playgroud)
然后用StaticResource
标记扩展引用它:
{Binding Name, Source={StaticResource Evp}}
Run Code Online (Sandbox Code Playgroud)
为了确保该类是单例的,将使用public static
仅获取属性:
public static Evp Instance {get;} = new Evp();
Run Code Online (Sandbox Code Playgroud)
然后您还可以添加一个private
构造函数以确保其他人无法创建您的类的实例:
private Evp()
{
}
Run Code Online (Sandbox Code Playgroud)
然后资源将被设置为:
App.Current.Resources["Evp"] = Evp.Instance;
Run Code Online (Sandbox Code Playgroud)
这使得只需使用Evp.Instance
.
归档时间: |
|
查看次数: |
3055 次 |
最近记录: |