我有WPF
个应用,我使用Prism
和Unity
。我还有两个自定义用户控件:
PlotViewControl
PlotViewReport
第二个使用DataTemplate
中的第一个控件。
如果我想打电话:
regionManager.RequestNavigate("RightRegion", "PlotViewControl", parameters);
PlotViewControl
的DataContext必须像PlotViewControl.xamls.cs
一样设置:
this.DataContext = new PlotViewModel();
如果我想以下列方式在UserControl
中使用上述PlotViewReport
,我必须删除上面的一行。
<ListView Name="PlotLista" SelectedIndex="{Binding SelectedValue}"
ItemsSource="{Binding PlotReportModelList}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<!--<ItemsControl ItemsSource="{Binding }">-->
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding}"/>
<pv:PlotViewControl DataContext="{Binding }" />
</StackPanel>
<!--</ItemsControl>-->
</DataTemplate>
</ListView.ItemTemplate>
所以,这是能够使用这两种方案的解决方案。
答案 0 :(得分:0)
考虑到在ItemTemplate中将DataContext设置为{Binding},这将指向当前的ListView项。因此,您必须使用RelativeSource绑定来获取ListView的DataContext。
Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, Path=DataContext.ViewModel}"