我想创建一个ObservableCollection类型的附加属性< Notification>并将其绑定到DataContext上相同类型的属性。
目前我有:
internal static class Squiggle
{
public static readonly DependencyProperty NotificationsProperty = DependencyProperty.RegisterAttached(
"Notifications",
typeof(ObservableCollection<Notification>),
typeof(TextBox),
new FrameworkPropertyMetadata(null, NotificationsPropertyChanged, CoerceNotificationsPropertyValue));
public static void SetNotifications(TextBox textBox, ObservableCollection<Notification> value)
{
textBox.SetValue(NotificationsProperty, value);
}
public static ObservableCollection<Notification> GetNotifications(TextBox textBox)
{
return (ObservableCollection<Notification>)textBox.GetValue(NotificationsProperty);
}
...
}
使用以下XAML:
<TextBox
x:Name="configTextBox"
Text="{Binding Path=ConfigText, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="True"
AcceptsTab="True"
local:Squiggle.Notifications="{Binding Path=Notifications}"/>
不幸的是,当我实际运行这个时,我得到一个例外说明:
'Binding'不能在'TextBox'集合中使用。 '绑定'只能在DependencyObject的DependencyProperty上设置。
当附加属性是ObservableCollection类型时,这似乎只是一个问题,因此看起来WPF在绑定此类型的属性时会尝试做一些神奇的事情,并在此过程中感到困惑。任何人都知道我需要做些什么才能让它发挥作用?
答案 0 :(得分:4)
DependencyProperty.RegisterAttached调用中的ownerType是注册DependencyProperty的类型。在您的示例中,不是TextBox
,而是Squiggle
。所以你想要的代码是:
public static readonly DependencyProperty NotificationsProperty = DependencyProperty.RegisterAttached(
"Notifications",
typeof(ObservableCollection<Notification>),
typeof(Squiggle),
new FrameworkPropertyMetadata(null, NotificationsPropertyChanged, CoerceNotificationsPropertyValue));