我有一个名为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绑定的有用帖子,帮助我解决了问题。 devcomponents.com/blog/?p=312
答案 0 :(得分:0)
我原以为要走的方法是将您的收藏容器绑定到ObservableCollection
MessageUIElements
MessageElement
},将您选择的项绑定到{{MessageElement
的属性1}}在实现INotifyPropertyChanged
接口的类中键入all,以防您希望从代码中驱动所选项。