已经通过’ListView’注册的属性

我有这个代码:

using System.Collections; using System.Windows; using System.Windows.Controls; public static class SelectedItems { private static readonly DependencyProperty SelectedItemsBehaviorProperty = DependencyProperty.RegisterAttached( "SelectedItemsBehavior", typeof(SelectedItemsBehavior), typeof(ListView), null); public static readonly DependencyProperty ItemsProperty = DependencyProperty.RegisterAttached( "Items", typeof(IList), typeof(SelectedItems), new PropertyMetadata(null, ItemsPropertyChanged)); public static void SetItems(ListView listView, IList list) { listView.SetValue(ItemsProperty, list); } public static IList GetItems(ListView listView) { return listView.GetValue(ItemsProperty) as IList; } private static void ItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var target = d as ListView; if (target != null) { CreateBehavior(target, e.NewValue as IList); } } private static void CreateBehavior(ListView target, IList list) { var behavior = target.GetValue(SelectedItemsBehaviorProperty) as SelectedItemsBehavior; if (behavior == null) { behavior = new SelectedItemsBehavior(target, list); target.SetValue(SelectedItemsBehaviorProperty, behavior); } } } public class SelectedItemsBehavior { private readonly ListView _listView; private readonly IList _boundList; public SelectedItemsBehavior(ListView listView, IList boundList) { _boundList = boundList; _listView = listView; _listView.SelectionChanged += OnSelectionChanged; } private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { _boundList.Clear(); foreach (var item in _listView.SelectedItems) { _boundList.Add(item); } } } 

XAML:

            

我有一个错误

‘SelectedItemsBehaviour’属性已由’Listview’注册。

我在两个单独的ListViews上的两个地方使用了这个代码,并且都给出了这个错误。

为什么我得到它,一切都是静态的。 我正在使用MVVM设计模式。

谢谢,

RegisterAttached ( ownerType )的第三个参数必须始终是声明属性的类,这里是SelectedItems

这种类型的潜在“目标”类型是一种常见的误解。

 private static readonly DependencyProperty SelectedItemsBehaviorProperty = DependencyProperty.RegisterAttached( "SelectedItemsBehavior", typeof(SelectedItemsBehavior), typeof(SelectedItems), // here null);