การส่งพารามิเตอร์ไปยังตัวสร้าง ViewModel

เป็นไปได้ไหมที่จะส่งพารามิเตอร์ไปยังตัวสร้าง ViewModel? จากนั้นฉันจะใช้พารามิเตอร์นี้เพื่อเริ่มต้นคุณสมบัติและ/หรือดำเนินการอื่นๆ ใน ViewModel

ด้วย WinForms ฉันสามารถทำได้

public MyForm(MyParamType myParam) {
    MyFormProperty = myParam;
    //etc.
}

ฉันจะทำสิ่งที่คล้ายกันในรูปแบบ MVVM / โดยใช้ MVVM Light ได้อย่างไร

ข้อเสนอแนะใด ๆ ที่จะยินดีมากที่สุด ขอบคุณล่วงหน้า.


person lazo    schedule 29.09.2010    source แหล่งที่มา
comment
ขอบคุณมากสำหรับทุกคนที่ตอบ เพื่อเป็นวิธีแก้ปัญหาชั่วคราวฉันได้ทำบางอย่างเช่น ((MyViewModel)MyView.DataContext).MyProperty = myParam; -- อย่างไรก็ตาม จะใช้คอนเทนเนอร์ IoC เพื่อจัดการสิ่งนี้ในที่สุด   -  person lazo    schedule 18.10.2010


คำตอบ (4)


ฉันอยากจะแนะนำให้ใช้คอนเทนเนอร์ IoC และกำหนดค่าคอนเทนเนอร์ของคุณเพื่อจัดหาพารามิเตอร์ระหว่างการก่อสร้าง

ตัวอย่างเช่น นี่คือลักษณะของโค้ดทั่วไปที่อยู่ด้านหลัง UserControl สำหรับฉันใน WPF:

public partial class MyDataGridView : IMyListView
{
    public MyDataGridView()
    {
      InitializeComponent();
    }

    public MyDataGridView(MyListViewModel viewModel)
    {
      InitializeComponent();

      DataContext = viewModel;
 }
}

StructureMap สร้าง MyListViewModel ให้ฉันเพราะโดยค่าเริ่มต้น มันจะค้นหา Constructor ที่โลภที่สุด จากนั้นจัดเตรียมการขึ้นต่อกัน ในการกำหนดค่า StructureMap ของฉัน ฉันสามารถระบุได้ว่า MyListViewModel จะได้รับพารามิเตอร์ใดก็ตามที่จำเป็นในการสร้างวัตถุนั้น

ด้วยคอนเทนเนอร์เช่น StructureMap ฉันไม่จำเป็นต้อง "ใหม่" วัตถุ เคย.

person Chris Holmes    schedule 29.09.2010
comment
โหวตขึ้นเพื่อแนะนำการฉีดการพึ่งพา DI สร้างแอปพลิเคชันที่สามารถทดสอบหน่วยได้มากขึ้น - person FMM; 03.10.2010
comment
ขอขอบคุณ การพึ่งพาการฉีดอาจเป็นแนวทางที่ยั่งยืนที่สุดในการก้าวไปข้างหน้า ฉันมีการปรับโครงสร้างเล็กน้อยที่ต้องทำเมื่อฉันไปซื้อของแล้วตัดสินใจว่าจะใช้คอนเทนเนอร์ IoC ใด - person lazo; 18.10.2010
comment
@lazo - ครั้งสุดท้ายที่ฉันเดินไปรอบ ๆ ฉันพบว่าชอบ Ninject สำหรับ IoC ดีที่สุด แต่ในแอปพลิเคชันประสบปัญหาในการตัดสินใจเลือกวิธีที่ดีที่สุดในการแบ่งปันเคอร์เนล - person jpierson; 25.06.2012

หากคุณใช้ไฟ MVVM (แม้ว่าคุณจะไม่ใช่ฉันเดาก็ตาม) คุณสามารถลงทะเบียนตัวจัดการข้อความกับ Messenger ที่ใช้พารามิเตอร์ตัวสร้างของคุณ (หรือสิ่งอันดับดังกล่าว) และอัปเดต VM ทุกครั้งที่คุณต้องการ "สร้างใหม่"

person Doobi    schedule 29.09.2010

เนื่องจากโมเดลมุมมองทั้งหมดเป็นแบบคงที่บนตัวระบุตำแหน่ง คุณจึงสามารถเข้าถึงคุณสมบัติเหล่านั้นได้โดยไม่ต้องเปลี่ยนตัวสร้าง

person Rick Ratayczak    schedule 30.09.2010
comment
ขอบคุณสำหรับการตอบกลับของคุณ ใช่ ฉันลงเอยด้วยการทำสิ่งที่คล้ายกับสิ่งที่คุณแนะนำที่นี่เพื่อเป็นวิธีแก้ปัญหาระยะสั้น - person lazo; 18.10.2010

ฉันไม่เข้าใจว่าทำไมคุณไม่สามารถสร้างโมเดลมุมมองด้วยตัวเองได้ คุณสามารถสร้างโมเดลมุมมองของคุณเองได้ตลอดเวลา หากมี viewmodel จัดทำโดย MVVM Light คุณสามารถสืบทอดจากโมเดลนั้นได้ตลอดเวลาและสร้างคอนสตรัคเตอร์ที่โอเวอร์โหลด

person AlvinfromDiaspar    schedule 29.09.2010