Sea*_*ean 1 prism mvvm xamarin.forms
在 Prism MVVM 框架中执行计算属性的最佳方法是什么?我在虚拟机上有一个Xamarin.Forms具有以下属性的应用程序:
private string _title;
public string Title
{
get { return _title; }
set
{
SetProperty(ref _title, value);
OnPropertyChanged(() => Message);
}
}
private string _name = "John";
public string Name
{
get { return _name; }
set
{
SetProperty(ref _name, value);
OnPropertyChanged(() => Message);
}
}
public string Message
{
get { return String.Format("{0},{1}", Name, Title); }
}
Run Code Online (Sandbox Code Playgroud)
该代码工作得很好。然而,Prism 库警告我OnPropertyChanged要使用的语句RaisePropertyChanged,这将避免使用魔术字符串,并且使用表达式的 OnPropertyChanged 效率较低。
是否有其他方法可以在名称或标题更改时通知视图重新读取“消息”?
这让我想到也许 Prism 有一种方法可以进行设置,以便“名称”和“标题”不必知道消息即可更新消息。如果可能的话,这将是更可取的。执行计算属性的“Prism”方式是什么?我在他们的文档中找不到任何示例Xamarin.Forms。
如果您尝试以更困难的方式做到这一点,您可以执行以下操作:
public class FooViewModel : BindableBase
{
private string _foo;
public string Foo
{
get => _foo;
set => SetProperty(ref _foo, value, () => RaisePropertyChanged(nameof(FooBar)));
}
public string FooBar => $"{Foo} Bar";
}
Run Code Online (Sandbox Code Playgroud)
如果你想让你的生活更轻松一点,请安装PropertyChanged.Fody,你就可以拥有一个如下所示的 ViewModel:
public class SomeViewModel : BindableBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
Run Code Online (Sandbox Code Playgroud)
Fody 应该为您提供一个空的 Weavers.xml,您只需将其更新为如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Weavers>
<PropertyChanged EventInvokerNames="RaisePropertyChanged" />
</Weavers>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |