TCM*_*TCM 3 c# silverlight windows-phone-7
我有一个全景控件,其数据模板如下: -
<DataTemplate x:Key="DataTemplateCategory">
<Grid >
<localControls:PanoramaItem BookmarkedTopics="{Binding Path=BookmarkedTopics,ElementName=root}" Topics="{Binding Topics}"/>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
根是定义全景图的usercontrol的名称.Path中的BookmarkedTopics是root(usercontrol)中的DependencyProperty,其定义如下: -
public static readonly DependencyProperty BookmarkedTopicsProperty = DependencyProperty.Register("BookmarkedTopics",
typeof(ObservableCollection<Topic>), typeof(MainPage), new PropertyMetadata(new ObservableCollection<Topic>()));
public ObservableCollection<Topic> BookmarkedTopics
{
get { return GetValue(BookmarkedTopicsProperty) as ObservableCollection<Topic>; }
set
{
SetValue(BookmarkedTopicsProperty, value);
}
}
Run Code Online (Sandbox Code Playgroud)
BookmarkedTopics在MainPage_Loaded中设置,它永远不会为null或空集合(与我的问题无关但仍然想提到它).BookmarkedTopics是PanoramaItem中的Dependency属性,其定义如下: -
public static readonly DependencyProperty BookmarkedTopicsProperty = DependencyProperty.Register("BookmarkedTopics",
typeof(ObservableCollection<Topic>), typeof(PanoramaItem), new PropertyMetadata(new ObservableCollection<Topic>()));
public ObservableCollection<Topic> BookmarkedTopics
{
get { return GetValue(BookmarkedTopicsProperty) as ObservableCollection<Topic>; }
set
{
SetValue(BookmarkedTopicsProperty, value);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当BookmarkedTopics在MainPage_Loaded中设置时,为什么PanoramaItem中的BookmarkedTopics的setter没有被触发?您可以在代码中看到的任何错误?
提前致谢 :)
通过绑定或动画分配依赖项属性值时,Silverlight使用该SetValue方法直接使用相应的DependencyProperty静态字段.因此,不调用POCO属性的setter方法.
如果需要在分配依赖项属性时运行代码,则需要使用如下代码: -
public ObservableCollection<Topic> BookmarkedTopics
{
get { return GetValue(BookmarkedTopicsProperty) as ObservableCollection<Topic>; }
set { SetValue(BookmarkedTopicsProperty, value); }
}
public static readonly DependencyProperty BookmarkedTopicsProperty =
DependencyProperty.Register(
"BookmarkedTopics",
typeof(ObservableCollection<Topic>),
typeof(MainPage),
new PropertyMetadata(null, OnBookmarkedTopicsPropertyChanged));
private static void OnBookmarkedTopicsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MainPage source = d as MainPage;
ObservableCollection<Topic> value = e.NewValue as ObservableCollection<Topic>;
// Code here to handle any work when the value has changed
}
Run Code Online (Sandbox Code Playgroud)
另请注意,此依赖项属性的默认值为null.不要将可变类型的实例用于依赖项属性默认值,因为该类的所有实例都会共享一个实例.
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |