2017-03-03 51 views
0

我有一個List<String>類型的屬性,名爲SuggestionFirstName。 我使用MVVMlight,所以我在二傳手爲什麼不List.Add()觸發Setter屬性?

public ObservableCollection<string> SuggestionFirstName 
    { 
     get { return _suggestionsFirstName; } 
     set { Set(ref _suggestionsFirstName, value); } 
    } 

,如果我做

SuggestionLastName = new List<String>(); 
SuggestionLastName.Add("hello"); 

爲什麼不會在第二個指令觸發屬性的set{ }方法使用Set()

回答

0

它不會觸發,因爲您沒有設置任何東西屬性SuggestionLastName
實際發生的是你物業獲取值(這是列表),然後將項目添加到它:

var list = SuggestionLastName; // getter triggered 
lits.Add("hello"); 

見,什麼都沒有設置:)

1

的SuggestionLastName是一個屬性一些物體,它被該行設定:

SuggestionLastName = new List<String>(); 

看到,它創建了一個新的名單,然後要記住該清單的財產。

然後,這條線:

SuggestionLastName.Add("hello"); 

則正好相反:它讀取的屬性有名單上的一抱,然後將其直接添加項目到同一列表它只有從財產讀取。沒有「設置屬性」發生。屬性被閱讀,然後名單的內容正在改變。列表沒有改變。

+0

感謝您的快速回答。那麼我有什麼辦法可以自己觸發嗎?我是否被迫使用ObservableCollection? –

+0

@ArthurAttout:是的,如果您想要「收聽」集合內容的更改,則需要使用發出通知的集合。 ObservableCollection就是其中的一個例子。不,你沒有被迫使用它。您可以使用任何其他更改通知集合,您可以編寫自己的(不那麼難,真的),或者您可以基於事件以外的其他方式推出自己的更改檢測。有許多可能性,但實際上,ObservableCollection通常是最簡單/最快(並非最快)的引入您的現有代碼。 – quetzalcoatl

相關問題