我必须使用UserControl,我无法改变。此UserControl的Datacontext在其构造函数中设置为自身。
public ParameterControl()
{
Datacontext = this;
}
UserControl应该是我的ListBox-Items的模板。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
DataContext="{Binding ElementName=StepView, Path=Datacontext.SelectedStep}" //this doesn't work
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我为datacontext实现的绑定不起作用。
有谁知道如何解决这个问题或者告诉我datacontexts在什么时间点设置?
感谢您的帮助, 亚历
修改
你好,
没有机会重建ParameterControl。 我有这个想法...
<ListBox
ItemsSource="{Binding Parameters}"
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
ParamName="{Binding <!--To the item in the ItemsSource-Collection-->}"
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
参数Control只需要正确显示ParamName属性的名称。 此名称位于ItemsSource-Collection的项目中。
现在有人怎么绑定?
感谢您的帮助,Alex
答案 0 :(得分:1)
在ItemsControl的ItemTemplate中使用的UserControl不能显式设置其DataContext
属性,因为这样做会阻止从项容器继承DataContext(例如此处的ListBoxItem)。
此问题的唯一有效解决方案是从UserControl的构造函数中删除DataContext分配,并替换任何可能的&#34;内部&#34;基于DataContext的RelativeSource
或ElementName
绑定绑定,如
<TextBlock
Text="{Binding SomeText, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
其中SomeText
是UserControl类的属性。
作为一般规则,请勿明确设置UserControl的DataContext
属性。