2017-06-20 128 views
0

什麼是棱鏡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); } 
} 

代碼工作就好了。然而,棱鏡庫警告我在OnPropertyChanged語句中使用RaisePropertyChanged這將避免使用魔法字符串和OnPropertyChanged與表達效率較低。

有一些其他方法來通知視圖重讀「消息」每當姓名或名稱的改變?

它讓我想也許棱鏡有辦法做一些事情,讓「名」和「標題」不必知道的消息,以便進行更新的消息。如果可能,這將是優選的。計算屬性的「棱鏡」方式是什麼?我在Xamarin.Forms文檔中找不到任何示例。

+0

線'的SetProperty(參見_name,值);'而事實上,所有視圖模型從'BindableBase'(INotifyPropertyChanged'的'實現)繼承已更新,只要你更新這些屬性的UI。你永遠不必顯式調用'RaisePropertyChanged'或'OnPropertyChanged'。因此,您需要將您的消息設置爲與Name一樣的屬性。 – ethane

回答

1

如果你想做到這一點,你可以做類似下面就越難方式:

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"; 
} 

如果你想使你的生活變得更輕鬆,安裝PropertyChanged.Fody,你可以只是有一個視圖模型像下面這樣:

public class SomeViewModel : BindableBase 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public string FullName => $"{FirstName} {LastName}"; 
} 

Fody應該給你一個空Weavers.xml,你只需要更新它看起來像:

<?xml version="1.0" encoding="utf-8"?> 
<Weavers> 
    <PropertyChanged EventInvokerNames="RaisePropertyChanged" /> 
</Weavers> 
+0

Fody與Xamarin.Forms一起工作嗎? – Sean

+0

其實,只是做了一個互聯網搜索,它看起來像Fody確實工作。感謝第一個代碼示例。 – Sean

+1

沒問題。是的,它確實有用,現在我用在我所有的項目中。 –