【发布时间】:2018-07-11 10:47:42
【问题描述】:
我在 WPF 中创建了简单的拖放。在我的应用程序中有两个 Listview。我必须将列表项从第一个列表视图拖放到第二个列表视图。我为第一个列表视图创建了自定义数据模板。当我将第一个列表视图项目拖到第二个列表视图中时,数据模板未自定义,因此不显示项目。如何使用泛型显示列表项。请帮忙。我的代码如下,
<Grid Margin="0,20,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ListBox
Name="memberCollection"
Grid.Column="1"
Width="150"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
PreviewMouseLeftButtonDown="memberCollection_PreviewMouseLeftButtonDown">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Grid
Name="gridDrop"
Grid.Column="0"
Margin="20,0,0,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ListBox.Drop="grid_Drop"
ShowGridLines="True">
<ListBox
Grid.Row="0"
Grid.Column="0"
Margin="10,10,0,0"
AllowDrop="True" />
</Grid>
</Grid>
代码背后
ObservableCollection<Member> member = new ObservableCollection<Member>();
public MainWindow()
{
InitializeComponent();
member.Add(new Member { Name = "Karthick", ID = "20011", Address = "10, MainRoad, Chennai" });
memberCollection.ItemsSource = member;
DataContext = new Member();
}
private void memberCollection_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
object selectedMember = memberCollection.SelectedItem as Member;
if (selectedMember != null)
DragDrop.DoDragDrop(memberCollection, selectedMember, DragDropEffects.All);
}
private void grid_Drop(object sender, RoutedEventArgs e)
{
ListBox listContent = e.Source as ListBox;
if (listContent != null)
Console.WriteLine("", Grid.GetColumn(listContent), Grid.GetRow(listContent));
DataObject item = (((DragEventArgs)e).Data) as DataObject;
object Target = ((Grid)(sender)).DataContext;
object listItem = item.GetData(Target.GetType());
if (listItem != null)
{
//listContent.Items.Add(listItem.Name.ToString());
//listContent.Items.Add(listItem.ID.ToString());
//listContent.Items.Add(listItem.Address.ToString());
//listContent.ItemTemplate = memberCollection.ItemTemplate;
listContent.Items.Add(listItem);
}
}
【问题讨论】:
-
@mm8,感谢您的回复。我的要求是列表框一仅显示名称,当拖动列表框一时,所选项目显示到第二个列表框。当我使用相同的项目模板名称时,仅显示到第二个列表框。
-
我不明白。你想在第二个 ListBox 中显示什么?
-
@mm8,请参考第二张截图
-
怎么样? “20011”和“10,……”从何而来?
-
@mm8,我已经在后面的代码中初始化了成员类的observablecollection,请参考。 member.Add(new Member { Name = "Karthick", ID = "20011", Address = "10, MainRoad, Chennai" });
标签: c# wpf xaml drag-and-drop