Wpf 从itemscontrol到usercontrol的绑定

Wpf 从itemscontrol到usercontrol的绑定,wpf,user-controls,itemscontrol,Wpf,User Controls,Itemscontrol,我有一个名为MessageElementControl的用户控件。它包含在MessageElementContainerControl中。当我调用MessageElementControl时,我试图将容器中的一些属性传递给它,但这些属性没有被设置。当我试图在MessageElementControl中使用它们时,它们是空的。有问题的属性是ParentCollection和ParentObject。我这样做是为了当用户对MessageElementControl执行更新或删除之类的操作时,我可以对

我有一个名为
MessageElementControl
的用户控件。它包含在
MessageElementContainerControl
中。当我调用
MessageElementControl
时,我试图将容器中的一些属性传递给它,但这些属性没有被设置。当我试图在
MessageElementControl
中使用它们时,它们是空的。有问题的属性是
ParentCollection
ParentObject
。我这样做是为了当用户对
MessageElementControl
执行更新或删除之类的操作时,我可以对集合进行必要的更改。这是容器的XAML。问题是如何使这些属性获得正确的值?或者我应该对整个事情采取完全不同的方法

<UserControl x:Class="Bix.MessageElementContainerControl" Loaded="ThisControl_Loaded"
             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" x:Name="ThisControl" xmlns:my="clr-namespace:Bix" 
             >
    <UserControl.Resources>

        <ObjectDataProvider x:Key="MessageElementDataProvider" ObjectType="{x:Type my:MessageElementDataProvider}"/>

        <ObjectDataProvider x:Key="MessageUIElements"
          ObjectInstance="{StaticResource MessageElementDataProvider}"
          MethodName="GetUIMessageElements"/>

        <DataTemplate x:Key="MessageElement">
            <my:MessageElementControl Width="{Binding ElementName=ThisControl,Path=Width}" 
                                          Element="{Binding Path=Element}" 
                                          ParentCollection="{Binding ElementName=ThisControl,Path=ItemsSource}" 
                                          ParentObject="{Binding ElementName=ThisControl,Path=ParentObjectSource}"/>
        </DataTemplate>

    </UserControl.Resources>
    <StackPanel Height="Auto" Name="panel1">
        <StackPanel Orientation="Horizontal" Height="Auto" Name="panel2">
            <Label Content="Attachments and Data" FontSize="18" FontWeight="Bold" Foreground="#FF5A5A5A" Height="34" HorizontalAlignment="Left" Name="label6" VerticalAlignment="Top" Width="{Binding ElementName=ThisControl,Path=LabelWidth}" />
            <Button Margin="0,4" Height="25" HorizontalAlignment="Left" Name="btnNew" Padding="3" VerticalAlignment="Top" Width="60" Click="btnNew_Click">
                <TextBlock FontSize="12" FontWeight="Bold" Foreground="#FF3C3C3C" Text="New" TextWrapping="Wrap"/>
            </Button>
        </StackPanel>
        <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" Width="{Binding ElementName=ThisControl,Path=Width}">
            <ItemsControl Name="itmsElements" Margin="0" 
                          ItemsSource="{Binding Source={StaticResource MessageUIElements}}" 
                          Width="{Binding ElementName=ThisControl,Path=Width}"
                          ItemTemplate="{Binding Source={StaticResource MessageElement}}">

            </ItemsControl>
        </ScrollViewer>
    </StackPanel>
</UserControl>


更新:找到了。我使用ThisControl作为容器和所包含对象的名称。所以绑定并没有真正发生。找到了一篇关于调试wpf绑定的有用文章,帮助我解决了这个问题

我本以为应该将您的收集容器绑定到
MessageElement
ObservableCollection
MessageUIElements
)上,如果要从代码中驱动所选项目,请将所选项目绑定到实现
INotifyPropertyChanged
接口的类中的
MessageElement
属性。

尝试将
ItemsControl.ItemSource
绑定到视图模型中的
ObservableCollection
。集合中的每一个更改都会立即更新控件。它是可观察的。。那是另一个问题。我到处都在使用可观察对象,当我对源集合进行更改时,itemscontrol似乎并不在意。我需要重置ItemsSource以使其刷新UI。但是这个问题上的问题是由相互冲突的用户名和控件名引起的。我使用ThisControl作为容器和所包含对象的名称。找到了一篇关于调试wpf绑定的有用文章,帮助我解决了这个问题。我很确定这就是我的架构。。但是由于某些原因,ItemsControl没有响应它。