如何解决对于代码为
我有一个RealmObject,它具有以下两个属性(IntOption和Option):
public enum Option { A,B,C }
public class MyObject : RealmObject
{
[PrimaryKey]
public string Id { get; set; }
public int IntOption { get; set; }
public Option Option
{
get => (Option)IntOption;
set
{
IntOption = (int)value;
RaisePropertyChanged();
}
}
}
基本上,Realm不允许您存储枚举属性,因此我同时拥有一个枚举属性和要存储的实际Int值。到目前为止,一切都很好。
现在,这很奇怪。如果我将这两个属性绑定到XAML文件中的标签,就像:
<Label Text="{Binding Option}" />
<Label Text="{Binding IntOption}" />
然后我在C#中为Option赋值:
myVariable.Option = Option.A;
绑定到IntOption属性的标签会更新为新值,但绑定到Option的标签不会更新。
经过大量调试后,我认为这里的关键元素是绑定到XAML页面的元素以及正在被代码修改的元素是两个不同的变量/对象实例,但是我不知道什么领域这样做是为了让IntOption实际上更新所有绑定,但是RaisePropertyChanged(本身就是应该执行此操作的领域方法)不会。
我应该怎么做,以使Option在属性更改时更新所有绑定(就像IntOption一样)?
解决方法
我仍然想知道是否存在一种更简单/更好的方法,但是到目前为止,我已经通过重写OnPropertyChanged方法解决了它。由于Realm内部处理的属性的确会在Realm记录的所有.Net实例上引发PropertyChanged事件,因此我可以检查该属性是否已更新,并为依赖于该属性的对象引发PropertyChanged事件:
protected override void OnPropertyChanged(string propertyName)
{
if (propertyName == nameof(IntOption))
{
RaisePropertyChanged(nameof(Option));
}
base.OnPropertyChanged(propertyName);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。