在WPF/MVVM中,在UserControl的DataContext而不是ListBox上进行数据绑定

在WPF/MVVM中,在UserControl的DataContext而不是ListBox上进行数据绑定,wpf,mvvm,Wpf,Mvvm,我需要从UserControl将ComboBox绑定到DataContext的“Rayons”属性(而不是包含ComboBox的ListView的ItemSources) 我尝试使用RelativeSource,但它不起作用,并且在调试窗口中没有错误消息 简化代码: <UserControl xmlns:my="clr-UI.View" x:Class="UI.View.MontureView" xmlns:i="clr-namespac

我需要从UserControl将ComboBox绑定到DataContext的“Rayons”属性(而不是包含ComboBox的ListView的ItemSources)

我尝试使用RelativeSource,但它不起作用,并且在调试窗口中没有错误消息

简化代码:

<UserControl xmlns:my="clr-UI.View"
             x:Class="UI.View.MontureView"
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d"
             d:DesignHeight="673" d:DesignWidth="980">
        <ListView ItemsSource="{Binding Path=Monture, Mode=TwoWay}" Margin="0,39,0,95" Height="600" HorizontalAlignment="Center">
            <ListView.View>
                <GridView>
                    <GridViewColumn >
                        <GridViewColumn.CellTemplate >
                            <DataTemplate>
                                <ComboBox Height="25" HorizontalAlignment="Center" Width="125"
                                          Name="comboBoxRay" Margin="0,2,0,3"
                                          ItemsSource="{Binding Path=Rayons,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
                                          SelectedValue="{Binding Path=IDRayon, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                          DisplayMemberPath="SRAY_LIBELLE"
                                          SelectedValuePath="SRAY_ID"  />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
</UserControl>

我怎么处理那个案子


我发现了,但是它没有帮助

你说它:来自
UserControl
DataContext
的属性。试一试

ItemsSource="{Binding Path=DataContext.Rayons,
                      RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"

有几种方法可以解决这个问题。但首先,如果您没有看到绑定错误,请尝试使用Snoop查看是否存在绑定错误

然而,如果您使用RelativeSource绑定,那么您的路径应该是:Path=DataContext.Rayons。在您的情况下,绑定需要usercontrol上的Rayons属性,但是当然没有Rayons属性

与您一样,relativesource绑定在大多数情况下都能正常工作,但当您在usercontrol中的usercontrol中有usercontrol时,它就变得很困难;)在这种情况下,我使用的是DataContextMarkerInterface(空接口)

然后将此接口添加到特定的usercontrol,并将relativesource绑定更改为AncestorType

ItemsSource="{Binding Path=DataContext.Rayons, RelativeSource={RelativeSource AncestorType={x:Type local:IDataContextMarkerRayonsSource }}}"
ItemsSource="{Binding Path=DataContext.Rayons, RelativeSource={RelativeSource AncestorType={x:Type local:IDataContextMarkerRayonsSource }}}"