【发布时间】:2013-03-09 20:38:24
【问题描述】:
Windows Phone 7.1 项目(WP 8.0 SDK),我想将 ItemTemplate 中的当前项传递给用户控件。
XAML:
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:ShipControl Ship="{Binding}" x:Name="ShipControl"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
ShipControl 背后的代码:
public object Ship
{
get
{
return GetValue(ShipProperty);
}
set
{
SetValue(ShipProperty, value);
}
}
//Used by xaml binding
public static readonly DependencyProperty ShipProperty = DependencyProperty.Register("Ship", typeof(Ship), typeof(Ship), new PropertyMetadata(null, new PropertyChangedCallback(OnShipChanged)));
private static void OnShipChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//TODO: Set break point here
return;
}
但是,在调试 Ship 时,值 DataBinding 的对象作为值传递,而不是 Ship(因此返回类型是 object 而不是 Ship)。这最终会导致 SetValue 出现异常。 Ship-properties 上的其他绑定确实有效,所以我真的不知道。根据这个问题,上面应该可以工作:
WPF Pass current item from list to usercontrol
有关在数据绑定上引发异常的示例项目,请参见此处,因为传递的对象是绑定而不是数据对象。 http://dl.dropbox.com/u/33603251/TestBindingApp.zip
【问题讨论】:
标签: silverlight windows-phone-7 windows-phone-8