[英]WPF: binding through custom dependency property
我有一个绑定到Dictionary
的TabControl
,并且有一个自定义控件,因为它是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
,希望它绑定从TabControl
传递的Schedules
,但与此同时MyViewer
为其分配了ViewModel
。 这就是MyViewer
中的MyViewer
:
<DataGrid Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=Schedules}" AutoGenerateColumns="False" >
到目前为止,这是行不通的,当加载MyViewer
时, Schedules
属性为null
。 但是,即使它可行,我也希望将Schedules传递给ViewModel
而不是后面的代码。 一种想法是使用MyViewer
ViewModels
填充Dictionary,但我不希望这样做,我只希望Main控件了解MyViewer
详细信息。 那么有什么好主意解决这个问题吗?
编辑:上面的命题更改为ObservableDictionary
后,确实可以工作,但问题仍然存在,如何在ViewModel
拥有Schedules
如果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
保持同步? 这取决于您的系统,但是您可以尝试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.