我有一个绑定到TabControl
的{{1}},并且有一个自定义控件,例如Dictionary
。自定义控件具有自定义依赖项属性ContentTemplate
,并且Schedules
已绑定到DataContext
,如下所示:
主控件:
ViewModel
在<TabControl Grid.Row="1" ItemsSource="{Binding Schedules}">
<TabControl.ContentTemplate>
<DataTemplate>
<TabControl >
<TabItem Header="Scheduled flights">
<views:MyViewer Schedules="{Binding Value}"/>
</TabItem>
</TabControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
中,我还有一个MyViewer
,我希望它绑定从DataGrid
传递的Schedules
,但同时{{1} }分配了TabControl
。在MyViewer
中是这样的:
ViewModel
到目前为止,当加载MyViewer
的{{1}}属性为<DataGrid Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=Schedules}" AutoGenerateColumns="False" >
时,此方法不起作用。但是,即使可行,我也希望将日程表传递到MyViewer
而不在后面编写代码。一个想法是用Schedules
的{{1}}填充Dictionary,但是我不想这样做,我只希望Main控件知道null
的细节。那么有什么好主意解决这个问题吗?
编辑:
上面的命题在更改为ViewModel
后确实有效,但是问题仍然是,如何在ViewModels
中包含MyViewer
答案 0 :(得分:0)
如果MyViewer
拥有自己的ViewModel,则您不应该这样做:
ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=UserControl}, Path=Schedules}"
通过这种方式MyViewer
与其他控件紧密耦合。
我认为,在这种情况下,MyViewer's ViewModel
应该拥有自己的财产Schedules
。您如何使TabControl ViewModel's Schedules
和MyViewer ViewModel's Schedules
保持同步?这取决于您的系统,但是您可以尝试以下方法: