更改UserControl的

时间:2016-10-11 14:02:26

标签: c# wpf user-controls

我必须使用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

1 个答案:

答案 0 :(得分:1)

在ItemsControl的ItemTemplate中使用的UserControl不能显式设置其DataContext属性,因为这样做会阻止从项容器继承DataContext(例如此处的ListBoxItem)。

此问题的唯一有效解决方案是从UserControl的构造函数中删除DataContext分配,并替换任何可能的&#34;内部&#34;基于DataContext的RelativeSourceElementName绑定绑定,如

<TextBlock
    Text="{Binding SomeText, RelativeSource={RelativeSource AncestorType=UserControl}}"/>

其中SomeText是UserControl类的属性。

作为一般规则,请勿明确设置UserControl的DataContext属性。