我无法通过父UserControl上的数据绑定使用DependencyProperty设置自定义用户控件的属性。
以下是我的自定义UserControl的代码:
public partial class UserEntityControl : UserControl
{
public static readonly DependencyProperty EntityProperty = DependencyProperty.Register("Entity",
typeof(Entity), typeof(UserEntityControl));
public Entity Entity
{
get
{
return (Entity)GetValue(EntityProperty);
}
set
{
SetValue(EntityProperty, value);
}
}
public UserEntityControl()
{
InitializeComponent();
PopulateWithEntities(this.Entity);
}
}
我希望在后面的代码中访问Entity属性,因为它将根据存储在Entity中的值动态构建用户控件。我遇到的问题是从未设置Entity属性。
以下是我在父用户控件中设置绑定的方法:
<ListBox Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding SearchResults}" x:Name="SearchResults_List">
<ListBox.ItemTemplate>
<DataTemplate>
<!--<views:SearchResult></views:SearchResult>-->
<eb:UserEntityControl Entity="{Binding}" ></eb:UserEntityControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我将ListBox的ItemsSource设置为SearchResults,它是一个Observable实体集合(与自定义UserControl上的Entity类型相同)。
我没有在调试输出窗口中收到任何运行时绑定错误。我只是无法设置Entity属性的值。有什么想法吗?
答案 0 :(得分:3)
您正试图在c-tor中使用Entity属性,这太快了。在将要给出属性值之前,将对c-tor进行解雇。
你需要做的是将一个propertyChanged事件HAndler添加到DependencyProperty,如下所示:
public static readonly DependencyProperty EntityProperty = DependencyProperty.Register("Entity",
typeof(Entity), typeof(UserEntityControl), new PropertyMetadata(null, EntityPropertyChanged));
static void EntityPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var myCustomControl = d as UserEntityControl;
var entity = myCustomControl.Entity; // etc...
}
public Entity Entity
{
get
{
return (Entity)GetValue(EntityProperty);
}
set
{
SetValue(EntityProperty, value);
}
}