我使用以下代码进行拖放和以下语句
在调试中检查时返回null,这里有什么问题?
var mySelectedItem = listbox1.SelectedItem as ListBoxItem;
public MainWindow()
{
InitializeComponent();
_UsersList.Add(new User {Name = "Mike"});
_UsersList.Add(new User { Name = "Nick" });
listbox1.ItemsSource = _UsersList;
}
public ObservableCollection<User> userList
{
get { return _UsersList; }
}
private void listbox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0 && string.IsNullOrEmpty(textbox1.Text))
{
if (listbox1.SelectedItems.Count > 0)
{
var mySelectedItem = listbox1.SelectedItem as ListBoxItem;
if (mySelectedItem != null)
{
DragDrop.DoDragDrop(listbox1, DragDropEffects.Copy);
}
}
}
}
xaml是
<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="115" Margin="100,75,0,0"
VerticalAlignment="Top" Width="150" ItemsSource="{Binding userList}"
SelectionChanged="listbox1_SelectionChanged" >
更新
当我将lilstBOXItem更改为用户或使用答案中建议的以下内容时会出现不同的错误:
var mySelectedItem = listbox1.ItemContainerGenerator
.ContainerFromItem(listbox1.SelectedItem) as ListBoxItem;
private void textbox1_PreviewDrop(object sender, DragEventArgs e)
{
string name = e.Data.GetData(DataFormats.StringFormat).ToString();
textbox1.Text += name;
textbox1.Focus();
textbox1.CaretIndex = textbox1.Text.Length;
e.Handled = true;
listbox1.Items.Remove(listbox1.SelectedItem);
}
listbox1.Items.Remove(listbox1.SelectedItem); 中的错误 此语句负责删除从列表框中选择并拖动到文本框的项目
peration is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead."}
答案 0 :(得分:2)
SelectedItem
的类型为User
。
如果你想获得容器,ListBoxItem
你可以这样:
var mySelectedItem = listBox1.ItemContainerGenerator
.ContainerFromItem(listBox1.SelectedItem) as ListBoxItem;
这将为您提供托管User类型对象的实际容器。
<强>更新强>
而不是
listbox1.Items.Remove(listbox1.SelectedItem);
您应该从ItemsSource集合中删除,并且从ObservableCollection<User>
开始,它将自动更新UI。
_UsersList.Remove(listBox1.SelectedItem)
答案 1 :(得分:1)
试试这个
var mySelectedItem = listbox1.SelectedItem as User;
您的ItemsSource是Type User的集合,因此SelectedItem将属于Type UserIile而不是ListBoxItem