2015-11-01 42 views
0

我將視圖模型中的實例添加到列表中,如下所示。由於該列表是傾聽的,但不是個別項目,所以我意識到我需要明確告訴視圖,它所綁定的列表已更新。儘管有通知,但數據網格並未顯示添加的記錄

public class ThingyViewModel : INotifyPropertyChanged 
{ 
    public List<Thingy> Thingies { get; set; } 

    public void Register(Thingy thingy) 
    { 
    using (ServiceClient client = ...) 
     client.Register(thingy); 
    Thingies.Add(thingy); 
    OnPropertyChanged("Thingies"); 
    } 
    ... 
} 

的方法OnPropertyChanged是VS,我利用一切別處其中擔任的默認實現。因此,我沒有理由懷疑在那裏犯規。

當我在視圖模型中調用註冊時在我的視圖中中斷執行時,我可以在數據上下文中清楚地看到新實例不在調用之前的列表中。同樣很清楚,我可以看到在操作執行完成後它處於數據上下文中。

因此,如果數據上下文確實確實獲得新實例並且調用了通知(是的,我已經對拼寫進行了四次檢查),那麼還會出現什麼錯誤?顯然我錯過了一些東西,但在這一點上,我看不到那可能是什麼 - 我需要一個或兩個指針。

<igDP:XamDataGrid Name="DataGrid" 
        DataSource="{Binding Path=Thingies}" 
        ...> 
+0

你能分享xaml嗎?爲什麼你的ThingyViewModel沒有實現INotifyPropertyChanged接口? – user2250152

+0

@ user2250152哦,它確實實現了它。做這個例子時我就把它關掉了。我的壞 - 讓我糾正它pronto。 XAML很可能不會告訴我們,因爲它在開始時會正確綁定。但我當然也會發佈一個這樣的內容。你稍等一會兒。 –

回答

1

如果您使用的ObservableCollection的財產一樣的東西(你的代碼是缺少的是什麼採集...),該集合將通知本身有新項目時會添加或刪除它,你不必調用任何OnPropertyChange。而且你不想以任何方式通知它,因爲現在你試圖告訴用戶Thingies是一個新對象,這是不正確的,只是它的內容已經改變。 而這不起作用,你必須向我們展示你的XAML代碼。

+0

對缺少的類型好眼睛。更正了錯字 - 謝謝。但是,我的要求是我並不總是在刷新視圖,所以我不能直接使用* ObservableCollection *。我需要能夠控制何時傳遞通知......(我知道,不尋常的情況下......) –

+0

你可以使用兩個集合,那就是UI(ObservableCollection)和其他「隊列「爲什麼補充,但尚未加入到視圖?而當你想這樣做時,你只需循環通過隊列並從那裏刪除它並將其添加到UI集合? – ceciliaSHARP

+0

這將工作得很好。接受答案並+1發現錯誤的眼睛。 –

相關問題