我对使用MVVM的“Master \ Detail”数据绑定有疑问,我希望你能帮助我:
假设我的Master ModelView是“ProductModelView”(对于产品实体),而Product Entity有一个名为ProductInventories的属性,类型为Entity Collection。我在我的主ProductModelView中定义了一个名为“ProductViewDCV”的“DomainCollectionView”
我执行以下项目来填充我的主人和详细信息Datagrids:
1 - 将我页面的DataContext设置为ModelView:ProductModelView
2将主Datagrid(名称:masterDG)绑定到ProductViewDCV。
将Datagrid(name:detailDG)的详细信息绑定到我的主ProductViewDCV的ProductInventories属性:
<sdk:DataGrid x:Name=" detailDG "
ItemsSource="{Binding Path= ProductViewDCV. ProductInventories }"/>
该程序运行良好,当我更改主DataGrid中的行时,子DataGrid中的当前项也会更改。
但我的问题和问题:
您好。
我非常感谢你的善意和快速的回答。我按照你的说法做了,但我遇到了一个问题,希望你帮助我:
方式:
在我的“ ProductModelView ”(对于产品实体)中,我定义了以下对象:
1 -private DomainCollectionView _ProductViewDCV ; (作为硕士(家长)观点)
2 -private PagedCollectionView _ProductViewPCV ; (如细节(儿童)观点)
3 - 在“ProductModelView”类的构造函数中,我将EVentHandler分配给“_ ProductViewDCV”(我的DomainCollectionView作为主视图):
this._ProductViewDCV.CurrentChanged+=_ProductViewDCV_CurrentChanged;
this._ProductViewDCV.Refresh();
4 - 在EventHandler中,我创建一个新的“ PagedCollectionView ”(我的详细信息/子视图)并将其分配给我的_ProductViewDCV:
if (_ProductViewDCV.CurrentItem != null)
{
_ProductViewPCV = new PagedCollectionView((_ProductViewDCV.CurrentItem as BA1.Web.Product).ProductInventories);
//ProductViewPCV.Refersh();
}
5 - 在我的查看文件(XAML文件)中,我有两个Datagrids配置如下:
Page DataContext is set to an object of my ModelView : ProductViewModel
sdk:DataGrid x:Name="dgParent" Grid.Row="1" ItemsSource="{Binding Path=ProductViewDCV}"//my Master/Parent DataGrid
sdk:DataGrid Grid.Row="2" x:Name="dgDetails" ItemsSource="{Binding Path=ProductViewPCV}//My Detail/Child DataGrid
问题:
当我更改Master / Parent DataGrid中的当前行时,Detail / Child DataGrid中没有任何反应并测试Detail / Child DataGrid的Itemssource属性,返回“Null”,而不是“PagedCollectionview”的对象。
我的问题在哪里以及为什么不响应Master / Parent当前项目更改而更新Detail / Child DataGrid? (测试表明,当其父集合发生变化时,ProductViewPCV本身会发生变化。)
再次感谢您给我这个问题的建议。
答案 0 :(得分:0)
在我的脑海中,我可以看到一些问题。您应该在构造函数中实例化_ProductViewPCV PagedCollectionView属性,而不是在_ProductViewDCV_CurrentChanged事件处理程序中创建它的新实例。如果您确实想这样做,那么您需要通过引发PropertyChanged事件来通知视图此_ProductViewPCV属性的值已更改。但是,您不应该这样做,因为它可能会导致内存泄漏。
你最好在PagedCollectionView中包装一个可观察的集合,我只想更新_ProductViewDCV_CurrentChanged事件处理程序中的observable集合的内容。我认为视图应该自动更新。对不起,我对此有点生疏,但我认为这对你有用。