财产已由“列表视图”注册
本文关键字:列表视图 注册 视图 列表 财产 | 更新日期: 2023-09-27 17:55:14
我有这个代码:
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:
<ListView SelectionMode="Extended" ItemsSource="{Binding Computers}" Views:SelectedItems.Items="{Binding SelectedComputers}" BorderBrush="Transparent" Height="100" VerticalAlignment="Top">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.Background>
<SolidColorBrush Color="Black" />
</ListView.Background>
</ListView>
我有一个错误
"选定项行为"属性已由 "列表视图"。
我在两个单独的ListViews
的两个地方使用了这段代码,并且都给出了此错误。
为什么我会得到它,一切都是静态的。我正在使用 MVVM 设计模式。
谢谢
RegisterAttached (ownerType
) 的第三个参数必须始终是声明属性的类,此处SelectedItems
。
常见的误解是,此类型是属性的潜在"目标"类型。
private static readonly DependencyProperty SelectedItemsBehaviorProperty = DependencyProperty.RegisterAttached(
"SelectedItemsBehavior",
typeof(SelectedItemsBehavior),
typeof(SelectedItems), // here
null);