我需要将我的ComboBox绑定到UserControl的DataContext的'Rayons'属性(而不是包含我的ComboBox的ListView的ItemSource)。
我尝试使用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>
我该如何处理这个案子?
我发现documentation但它没有帮助
答案 0 :(得分:2)
有几种方法可以解决这个问题。但首先如果你没有看到绑定错误,请尝试使用Snoop查看是否存在Binding错误。
然而,如果您使用RelativeSource绑定,您的路径应该类似于:Path = DataContext .Rayons。在你的情况下,绑定需要你的usercontrol上的Rayons属性,但当然没有Rayons属性。
像你所做的亲属源绑定大部分时间都有效,但是当你在usercontrol中的usercontrol中有一个usercontrol时,就很难;)在这种情况下,我使用 DataContextMarkerInterface (空接口)。
public interface IDataContextMarkerRayonsSource {}
然后将此接口添加到您的特定用户控件并将relativesource绑定更改为AncestorType
ItemsSource="{Binding Path=DataContext.Rayons, RelativeSource={RelativeSource AncestorType={x:Type local:IDataContextMarkerRayonsSource }}}"
答案 1 :(得分:1)
你说的是:来自DataContext
UserControl
的财产。尝试
ItemsSource="{Binding Path=DataContext.Rayons,
RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"