Melewati Parameter ke konstruktor ViewModel

Apakah mungkin meneruskan parameter ke konstruktor ViewModel? Saya kemudian akan menggunakan parameter ini untuk menginisialisasi properti dan/atau melakukan operasi lain di ViewModel.

Dengan WinForms saya bisa melakukannya

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

Bagaimana cara saya melakukan hal serupa dalam pola MVVM/menggunakan MVVM Light?

Setiap saran akan sangat kami terima. Terima kasih sebelumnya.


person lazo    schedule 29.09.2010    source sumber
comment
Terima kasih banyak kepada semua yang telah menjawab. Sebagai solusi sementara saya telah melakukan sesuatu seperti, ((MyViewModel)MyView.DataContext).MyProperty = myParam; -- Namun, pada akhirnya saya akan menggunakan wadah IoC untuk menangani hal ini.   -  person lazo    schedule 18.10.2010


Jawaban (4)


Saya akan merekomendasikan menggunakan wadah IoC dan mengonfigurasi wadah Anda untuk menyediakan parameter pada saat konstruksi.

Misalnya, inilah kode khas di belakang UserControl bagi saya di WPF:

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

    public MyDataGridView(MyListViewModel viewModel)
    {
      InitializeComponent();

      DataContext = viewModel;
 }
}

StructureMap membuat MyListViewModel untuk saya karena secara default ia mencari konstruktor yang paling rakus dan kemudian menyediakan dependensinya. Dalam konfigurasi StructureMap saya, saya dapat menentukan bahwa MyListViewModel dilengkapi dengan parameter apa pun yang diperlukan pada konstruksi objek tersebut.

Dengan wadah seperti StructureMap, saya tidak perlu membuat objek "baru". Pernah.

person Chris Holmes    schedule 29.09.2010
comment
Terpilih karena menyarankan injeksi ketergantungan. DI membuat aplikasi lebih dapat diuji unitnya. - person FMM; 03.10.2010
comment
Terima kasih, injeksi ketergantungan mungkin merupakan cara paling berkelanjutan untuk maju. Saya memiliki sedikit pemfaktoran ulang yang harus dilakukan setelah saya berkeliling dan memutuskan wadah IoC mana yang akan digunakan. - person lazo; 18.10.2010
comment
@lazo - terakhir kali saya berbelanja, saya menemukan bahwa Ninject untuk IoC paling disukai tetapi dalam aplikasi mengalami masalah dalam menentukan cara terbaik untuk berbagi Kernel. - person jpierson; 25.06.2012

Jika Anda menggunakan lampu MVVM (walaupun saya kira bukan), Anda dapat mendaftarkan penangan pesan dengan Messenger yang mengambil parameter konstruktor Anda (atau tupelnya) dan memperbarui VM kapan pun Anda perlu "merekonstruksinya".

person Doobi    schedule 29.09.2010

Karena semua model tampilan bersifat statis pada pencari lokasi, Anda cukup mengakses properti tersebut tanpa mengubah konstruktor.

person Rick Ratayczak    schedule 30.09.2010
comment
Terimakasih atas tanggapan Anda. Ya, saya akhirnya melakukan sesuatu yang mirip dengan apa yang Anda sarankan di sini sebagai solusi jangka pendek. - person lazo; 18.10.2010

Saya tidak mengerti mengapa Anda tidak bisa membuat model tampilan sendiri. Anda selalu dapat membuat model tampilan Anda sendiri. Jika ada model tampilan yang disediakan oleh MVVM Light maka Anda selalu dapat mewarisi model tampilan tersebut dan membuat konstruktor yang kelebihan beban.

person AlvinfromDiaspar    schedule 29.09.2010