Why is my namespace not recognized in Visual Studio / xaml
以下是我的2个类A可附加属性SelectedItems:
代码来自此处:将muliselect列表框中的selecteditems与viewModel中的集合同步
命名空间tbm.helper确实是正确的,因为它也适用于其他类。
命名空间引用也在xaml文件和selecteditems.cs文件中!
1 | xmlns:Helper="clr_namespace:TBM.Helper" |
但是
不起作用,因为=>
XML命名空间"clr_namespace:tbm.helper"中不存在属性"selecteditems.items"。在类型"SelectedItems"中找不到可附加属性"items"
我要换什么?
1 | using System; |
使用system.collections.generic;使用system.linq;使用system.text;使用system.windows.controls;使用system.collections;使用system.windows;
命名空间tbm.helper{公共静态类SelectedItems:DependencyObject{私有静态只读DependencyProperty SelectedItemsBehaviorProperty=DependencyProperty.RegisterAttached("selecteditemsbehavior",typeof(选择editemsbehavior),类型(列表框)零);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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; } } |
}
1 | using System.Windows; |
使用system.windows.controls;使用system.collections;
命名空间tbm.helper{公共类selecteditemsbehavior{私有只读列表框私有只读列表;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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); } } |
}
起初我认为这是一个打字错误(也许是),但由于您的例外情况也表示
1 | xmlns:Helper="clr-namespace:TBM.Helper" |
我没有查看所有其他代码,所以可能还有其他问题。但是,您应该首先尝试上述方法。祝你好运!
编辑:您的
1 | xmlns:Helper="clr-namespace:TBM.Helper;assembly=MyOtherAssemblyName" |
此外,不能为静态类设置基类:
1 | public static class SelectedItems : DependencyObject |
这是不可能的。只需拆卸
如果这仍然不起作用,我就离开这里。你的代码真的很乱,至少你是怎么发布的…