認識到這些是我的2班可附加屬性SelectedItems:爲什麼我沒有命名空間在Visual Studio中/ XAML
代碼是從這裏:Sync SelectedItems in a muliselect listbox with a collection in 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'。 類型'SelectedItems
中找不到可附加屬性「Items」。我需要更改哪些內容?
using System;
using System.Collections.Generic;使用System.Linq的 ; using System.Text; using System.Windows.Controls;使用System.Collections的 ;使用System.Windows的 ;
命名空間TBM.Helper { 公共靜態類SelectedItems:DependencyObject的 { 私人靜態只讀的DependencyProperty SelectedItemsBehaviorProperty = DependencyProperty.RegisterAttached( 「SelectedItemsBehavior」, typeof運算(SelectedItemsBehavior), typeof運算(列表框), 空);
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; private readonly 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);
}
}
}
聽起來像人爲錯誤,現在提供清晰響應的可能性非常小。 – nedruod 2010-04-24 23:06:58
人爲錯誤在哪裏?如果Visual Studio允許它,我仍然可以更改名稱空間... – msfanboy 2010-04-25 11:09:51
我確定在那裏有一個問題... – miguel 2010-04-28 21:25:36