2015-11-01 43 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发现错误的眼睛。 –

相关问题