0
當子對象從一個容器拖到另一個容器時,我們可以將子對象轉換爲父對象嗎?這是我想要做的。將子對象強制轉換爲父對象 - C#WPF
- 我有派生類1的對象列表框和派生類2
- 當我拖累派生類對象1,並嘗試在另一個列表框砸,我得到的對象類型派生類1.同樣,當我拖動派生類2對象時,它是派生類2。
在DropSource綁定到ObservableCollection的ItemSource的另一個列表框時,我想將這些派生類對象轉換爲Base類。
注意:當我用帶有拖拽對象的typeof運算符使用Base Class時,我得到空值。
這是我的XAML
<GroupBox Header="BaseClassObjects" >
<ListBox SelectedIndex="0" ItemsSource="{Binding BaseClassList}" DisplayMemberPath="Name" PreviewMouseLeftButtonDown="protocol_PreviewMouseLeftButtonDown">
</ListBox>
</GroupBox>
<GroupBox Header="Drop Here" >
<ListBox AllowDrop="True" Drop="ports_Drop">
</ListBox>
</GroupBox>
在視圖模型
ObservableCollection<BaseClass> baseClassList = new ObservableCollection<BaseClass>();
public ObservableCollection<BaseClass> BaseClassList
{
get { return baseClassList; }
set { baseClassList = value; }
}
public VM_DragDrop()
{
BaseClassList.Add(new DerivedClassOne() { Name = "Derived Class 1" });
BaseClassList.Add(new DerivedClassTwo() { Name = "Derived Class 2" });
}
基地綁定屬性和派生類在xaml.cs
public class BaseClass
{
public string Name { get; set; }
}
public class DerivedClassOne : BaseClass
{
}
public class DerivedClassTwo : BaseClass
{
}
事件處理程序文件
private void protocol_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListBox listbox = (sender as ListBox);
DragDrop.DoDragDrop(listbox, listbox.SelectedItem, DragDropEffects.Copy);
}
private void ports_Drop(object sender, DragEventArgs e)
{
BaseClass droppedObject = (BaseClass)(e.Data.GetData(typeof(BaseClass)));
(sender as ListBox).Items.Add(droppedObject);
}
這裏,只要拖動派生類1或派生類2,droppedObject就會爲空,因爲數據我們通過拖動對象獲得的是DerivedClassOne或DerivedClassTwo。
請建議如何在丟棄時將這些派生對象轉換爲父項。
您可以在調試時看到e.Data的內容嗎? – bit
是的。我可以在e.Data中看到拖動的對象信息。即當我拖動「派生類1」時,我會在e.Data中看到「DerivedClassOne」 –