为什么我的命名空间在Visual Studio / xaml中无法识别
这些是我的2个类可附加属性SelectedItems:
代码是从这里:将Muliselect列表框中的SelectedItems与ViewModel中的集合同步
命名空间TBM.Helper当然适用,因为它也适用于其他类。
名称空间引用也位于xaml文件和SelectedItems.cs文件中!
xmlns:Helper="clr_namespace:TBM.Helper"
  但是<ListBox Helper:SelectedItems.Items="{Binding SelectedItems}" ... 
不起作用,因为=>
XML命名空间'clr_namespace:TBM.Helper'中不存在属性'SelectedItems.Items'。 'SelectedItems'类型中找不到可附加属性'Items'
我需要改变什么?
    using System;
使用System.Collections.Generic; 使用System.Linq; 使用System.Text; 使用System.Windows.Controls; 使用System.Collections; 使用System.Windows;
我们可以通过下面的方法来创建一个名称空间TBM.Helper:public static class SelectedItems:DependencyObject {private static readonly DependencyProperty SelectedItemsBehaviorProperty = DependencyProperty.RegisterAttached(“SelectedItemsBehavior”,typeof(SelectedItemsBehavior),typeof(ListBox),null);
    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; 使用System.Collections;
命名空间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);           
    }
}
}
  起初我认为这是一个错字(也许是错误的),但是因为你的异常还说明了clr_namespace:TBM.Helper带有下划线,我认为它可能实际上在你的代码中。  尝试用下面的连字符替换下划线: 
xmlns:Helper="clr-namespace:TBM.Helper"
我没有看过所有其他的代码,所以也许还有另一个问题。 但是,你应该尝试以上第一。 祝你好运!
  编辑:你的SelectedItemsBehavior类与你的XAML在同一个程序集中吗?  否则,您将不得不在您的项目中引用其他程序集,并将您的名称空间声明更改为如下所示: 
xmlns:Helper="clr-namespace:TBM.Helper;assembly=MyOtherAssemblyName"
此外,您不能为静态类设置基类:
public static class SelectedItems : DependencyObject
  这不可能。  只需删除: DependencyObject 
如果这仍然没有帮助,我就离开这里。 你的代码非常混乱,至少你是如何发布它的......
链接地址: http://www.djcxy.com/p/53885.html上一篇: Why is my namespace not recognized in Visual Studio / xaml
