控件加载时,我无法显示自定义控件属性的绑定值

时间:2013-08-13 02:15:16

标签: .net wpf data-binding wpf-controls

我的wpf应用程序中有自定义控件。这是一个自定义的“自动完成”TextBox,用户可以根据输入键入文本并获取选项的更新列表。

控制模板如下:

<ControlTemplate TargetType="{x:Type local:AutoCompleteTextBox}">
    <Grid>
        <Border x:Name="PART_ControlBorder" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
             <Grid>
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="*" />
                     <ColumnDefinition Width="Auto" />
                 </Grid.ColumnDefinitions>
                 <Grid.RowDefinitions>
                     <RowDefinition Height="Auto" />
                 </Grid.RowDefinitions>
                 <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="Stretch"/>
                 <Button x:Name="PART_DropDownButton" Grid.Column="1"  />
             </Grid>
         </Border>
         <Popup x:Name="PART_Popup" StaysOpen="False" Width="Auto" Height="Auto">
             <ListBox x:Name="PART_ListBox" HorizontalContentAlignment="Stretch" SelectionMode="Single"/>
         </Popup>
     </Grid>
 </ControlTemplate>

基本上用户输入TextBoxPopup显示带有选项的ListBox。当用户从ListBox中选择一个选项后,自定义控件代码会使用TextBox选定项目字段中的某个属性填充ListBox。 (此字段的名称以字符串类型DependencyProperty提供)

我绑定的SelectedItem DependencyProperty声明如下

Public Property SelectedItem As Object
    Get
        Return GetValue(SelectedItemProperty)
    End Get
    Set(ByVal value As Object)
        SetValue(SelectedItemProperty, value)
    End Set
End Property
Public Shared ReadOnly SelectedItemProperty As DependencyProperty = DependencyProperty.Register( _
                    "SelectedItem", GetType(Object), GetType(AutoCompleteTextBox), _
                    New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault))

问题

当控件的SelectedItem属性在创建/渲染时已被绑定时,我需要使用SelectedItem的“名称”填充TextBox(不仅仅是{{1}选择更改,这就是我现在拥有的)。

我尝试了什么

我尝试在基本自定义控件的ListBoxSelectedItem事件中访问此EndInit,但它的值为nothing。我无法使用加载的事件,因为它不允许我使用它。

有人可以帮我弄清楚首​​次加载控件时要使用的事件。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试将SelectedItem属性绑定到ControlTemplate

<ScrollViewer x:Name="PART_ContentHost" 
              Content={TemplateBinding SelectedItem}
              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
              HorizontalAlignment="Stretch"/>