UserControl中的UserControl作为DataTemplate

时间:2013-04-30 08:44:24

标签: wpf user-controls itemscontrol

我尝试在UserControl中使用DataTemplate作为ItemsControlUserControl被称为WorkItemControl,而ObservableCollection ItemsSourceItemsControl的对象属于WorkItemModel类型。

启用绑定诊断时出现以下错误

BindingExpression路径错误:

'ItemModelText' property not found on 'object' ''WorkItemControl' (Name='')'. 
BindingExpression:Path=ItemModelText; DataItem='WorkItemControl' (Name='');
target element is 'WorkItemControl' (Name=''); target property is 'ItemText' (type 'String')

如果使用UserControl,将Button用作DataTemplate,它可以正常工作。

以下XAML代码段显示ItemsControl

    <Border Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" BorderThickness="0" BorderBrush="Black">
        <ItemsControl Name="WorkItems" ItemsSource="{Binding Path=WorkItemModels}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <control:WorkItemControl ItemText="{Binding Path=ItemModelText}"/>
                    <!--<Button Content="{Binding Path=ItemModelText}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Border>

任何想法为什么它不适用于UserControl

1 个答案:

答案 0 :(得分:0)

我不确定我能写出我的想法...... 您需要RelativeSource = Self来在UserControl的XAML中使用UserControl的属性,但是当您尝试将属性绑定到外部时,同样的RelativeSource会受到影响。我面临着同样的问题。我设法通过设置外部绑定的来源来解决它,但我认为这不是太优雅的方式。事实上,我认为这是WPF中的设计问题(在我看来),UserControl中的RelativeSource 不应该影响它的任何绑定 (但确实如此)。 如果你以更好的方式解决这个问题,请告诉我。感谢。