我有一个用户控件如下:
<UserControl x:Class="CaseDatabase.Controls.SearchResultControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="192" d:DesignWidth="433">
<Grid x:Name="LayoutRoot" Background="White" Height="230" Width="419">
<Grid.RowDefinitions>
<RowDefinition Height="68*" />
<RowDefinition Height="90*" />
</Grid.RowDefinitions>
<TextBlock x:Name="TitleLink" Height="33" Text="{Binding CaseTitle}" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="100" Foreground="Red"/>
</Grid>
具有CaseTitle的依赖项属性:
public string CaseTitle
{
get { return (string)GetValue(TitleProperty); }
set {
SetValue(TitleProperty, value); }
}
// Using a DependencyProperty as the backing store for Title. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("CaseTitle", typeof(string), typeof(SearchResultControl), new PropertyMetadata(new PropertyChangedCallback(SearchResultControl.OnValueChanged)));
在我的.xaml页面中我有一个列表框,在其datatemplate中我实现了我的控件。此列表框的ItemsSource绑定到域服务。我知道绑定工作,我得到适当数量的元素,但没有任何数据显示。
我的列表框的代码如下:
<ListBox x:Name="SearchResultsList" Width="Auto" MinHeight="640" ItemsSource="{Binding ElementName=SearchDomainDataSource, Path=Data}"
Grid.Row="0" Grid.Column="0">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="LayoutRoot" Background="White" Height="158" Width="400">
<my:SearchResultControl CaseTitle="{Binding Path=Title}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
那么有人可以建议我如何搞砸我对用户控件的绑定? Thankx
答案 0 :(得分:1)
问题是{Binding CaseTitle}
没有找到您创建的CaseTitle
依赖项属性。 Binding使用的默认Source
对象是绑定到的元素的DataContext
属性的当前值。该对象不是UserControl
。
因此,您需要更改该绑定,如下所示: -
<TextBlock x:Name="TitleLink" Height="33" Text="{Binding Parent.CaseTitle, ElementName=LayoutRoot}" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="100" Foreground="Red"/>
现在,绑定的源对象变为Grid
,其名称为“LayoutRoot”,它是UserControl
的直接子项,因此其Parent
属性是用户控件,并且来自在那里你可以绑定到CaseTitle
属性。