это мои 2 класса a Присоединяемое свойство SelectedItems:
код отсюда: Синхронизация выбранных элементов в списке с несколькими выборками с коллекцией в ViewModel
Пространство имен TBM.Helper точно подходит, так как оно работает и для других классов.
Ссылка на пространство имен также находится в файле xaml И файле SelectedItems.cs!
xmlns:Helper="clr_namespace:TBM.Helper"
Но <ListBox Helper:SelectedItems.Items="{Binding SelectedItems}" ...
не работает, потому что =>
Свойство 'SelectedItems.Items' не существует в пространстве имен XML 'clr_namespace: TBM.Helper'.
Присоединяемое свойство 'Items' не найдено в типе 'SelectedItems
Что я должен изменить?
using System;
с использованием System.Collections.Generic;
использование System.Linq;
используя System.Text;
использование System.Windows.Controls;
использование System.Collections;
использование System.Windows;
namespace TBM.Helper
{
открытый статический класс SelectedItems: DependencyObject
{
приватная статическая только для чтения DependencyProperty SelectedItemsBehaviorProperty =
DependencyProperty.RegisterAttached (
"SelectedItemsBehavior",
TypeOf (SelectedItemsBehavior),
TypeOf (ListBox),
нуль);
public static readonly DependencyProperty ItemsProperty = DependencyProperty.RegisterAttached(
"Items",
typeof(IList),
typeof(SelectedItems),
new PropertyMetadata(null, ItemsPropertyChanged));
public static void SetItems(ListBox listBox, IList list) { listBox.SetValue(ItemsProperty, list); }
public static IList GetItems(ListBox listBox) { return listBox.GetValue(ItemsProperty) as IList; }
private static void ItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var target = d as ListBox;
if (target != null)
{
GetOrCreateBehavior(target, e.NewValue as IList);
}
}
private static SelectedItemsBehavior GetOrCreateBehavior(ListBox target, IList list)
{
var behavior = target.GetValue(SelectedItemsBehaviorProperty) as SelectedItemsBehavior;
if (behavior == null)
{
behavior = new SelectedItemsBehavior(target, list);
target.SetValue(SelectedItemsBehaviorProperty, behavior);
}
return behavior;
}
}
}
using System.Windows;
использование System.Windows.Controls;
using System.Collections;
namespace TBM.Helper
{
открытый класс SelectedItemsBehavior
{
только для чтения ListBox _listBox;
приватный только для чтения IList _boundList;
public SelectedItemsBehavior(ListBox listBox, IList boundList)
{
_boundList = boundList;
_listBox = listBox;
SetSelectedItems();
_listBox.SelectionChanged += OnSelectionChanged;
_listBox.DataContextChanged += OnDataContextChanged;
}
private void SetSelectedItems()
{
_listBox.SelectedItems.Clear();
foreach (object item in _boundList)
{
// References in _boundList might not be the same as in _listBox.Items
int i = _listBox.Items.IndexOf(item);
if (i >= 0)
_listBox.SelectedItems.Add(_listBox.Items[i]);
}
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
SetSelectedItems();
}
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
_boundList.Clear();
foreach (var item in _listBox.SelectedItems)
_boundList.Add(item);
}
}
}