绑定DataContext而不在后面设置代码

时间:2015-06-11 08:26:58

标签: c# wpf xaml datacontext

我有WPF个应用,我使用PrismUnity。我还有两个自定义用户控件:

  1. PlotViewControl
  2. PlotViewReport
  3. 第二个使用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>
    

    所以,这是能够使用这两种方案的解决方案。

1 个答案:

答案 0 :(得分:0)

考虑到在ItemTemplate中将DataContext设置为{Binding},这将指向当前的ListView项。因此,您必须使用RelativeSource绑定来获取ListView的DataContext。

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, Path=DataContext.ViewModel}"