ฉันไม่คิดว่าคุณจำเป็นต้องเขียนพาเนลหรือเพิ่มพฤติกรรมให้กับพาเนลของคุณ หากคุณจำลองคลาสของคุณถูกต้องในสิ่งที่คุณพยายามทำสามารถทำได้โดยใช้ ItemsControls พร้อมความสามารถในการเลือกรายการ (เช่น ListBox) - ฉันถือว่าคุณกำลังใช้ เอ็มวีวีเอ็ม
ประโยชน์ของแนวทางนี้คือ คุณไม่ได้สร้างและรักษาประเภทแผงเพิ่มเติมที่คุณอาจไม่ต้องการ นอกจากนี้ทุกสิ่งในโมเดลและโมเดลวิวของคุณสามารถทดสอบได้อย่างสมบูรณ์ ฉันขอแนะนำให้ใช้หรือขยายการควบคุมและคอนเทนเนอร์ WPF ที่มีอยู่ทุกครั้งที่เป็นไปได้ อย่างไรก็ตาม ในกรณีนี้ เราอาจดำเนินการได้หากไม่มีสิ่งนี้
มุมมองโมเดล
public class ItemsVM
{
// You can always keep the items sorted based on you business rules
public ObservableCollection<ItemModel> Items {get;set;}
public ItemVM()
{
Items = new ObservableCollection<ItemModel>(){
new ItemModel(), new ItemModel()
};
}
}
รุ่น
public class ItemModel
{
public bool IsSelected {get;set;}
public ObservableCollection<ItemModel> Items {get;set;}
public ItemModel()
{
Items = new ObservableCollection<ItemModel>();
}
}
ดู
<ListBox ItemsSource={Binding Items} SelectionMode=Single />
เมื่อผู้ใช้คลิกที่รายการใดรายการหนึ่งในกล่องรายการของคุณ คุณควรตั้งค่าคุณสมบัติ IsSelected ของรายการที่เกี่ยวข้องใน ItemVM เมื่อมีการเปลี่ยนแปลงคุณสมบัตินี้ คุณสามารถเพิ่มรายการนี้ลงในคอลเลกชันรายการขององค์ประกอบด้านบนในรายการของคุณได้
คุณสามารถควบคุมวิธีการสร้างเทมเพลต ItemModel ของคุณได้อย่างเต็มที่ ไอเท็มบนสุดจะมีไอเท็มในคอลเลกชั่น Items ซึ่งสามารถแสดงได้ในแบบที่คุณมีในไดอะแกรมของคุณ
เกี่ยวกับแอนิเมชั่น สามารถทำได้โดยใช้โค้ดหลังหรือคุณสมบัติที่แนบมา แนวคิดนี้ง่ายมาก คุณรู้ว่าผู้ใช้คลิกที่กล่องรายการที่ไหน และคุณควรจะได้ตำแหน่งขององค์ประกอบบนสุดใน กล่องรายการทำให้ DataTemplate เคลื่อนไหวจากตำแหน่งการคลิกปัจจุบันไปที่ด้านบนของรายการ
person
Shrinand
schedule
26.02.2013