Pertanyaannya cukup banyak menjelaskan semuanya.
Saya memiliki jendela, dan telah mencoba untuk mengatur DataContext menggunakan namespace lengkap ke ViewModel, tapi sepertinya saya melakukan sesuatu yang salah.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
Jawaban:
Selain solusi yang disediakan orang lain (yang baik dan benar), ada cara untuk menentukan ViewModel di XAML, namun masih memisahkan ViewModel tertentu dari View. Memisahkannya berguna saat Anda ingin menulis kasus uji yang terisolasi.
Di App.xaml:
Di MainWindow.xaml:
sumber
Coba ini sebagai gantinya.
sumber
Window
elemen, sepertiDataContext="VM:MainWindowViewModel"
?MarkupExtension
, tidak pernah melakukannya pada VM, tetapi Anda dapat melakukannya dengan konverter untuk memastikan hanya satu contoh konverter yang ada dan memanggilnya langsung dari xaml dengan="{converters:SomethingConverter}"
, menyiratkanxmlns:converters
titik pada namespace konverter.public abstract class BaseValueConverter<T> : MarkupExtension, IValueConverter where T : class, new() { private static T _converter; public override object ProvideValue(IServiceProvider serviceProvider) { return _converter ?? (_converter = new T()); } }
Anda perlu membuat instance MainViewModel dan menyetelnya sebagai konteks data. Dalam pernyataan Anda itu hanya menganggapnya sebagai nilai string.
sumber
Anda mungkin ingin mencoba Catel . Ini memungkinkan Anda untuk mendefinisikan kelas DataWindow (bukan Window), dan kelas itu secara otomatis membuat model tampilan untuk Anda. Dengan cara ini, Anda bisa menggunakan deklarasi ViewModel seperti yang Anda lakukan di posting asli Anda, dan model tampilan akan tetap dibuat dan disetel sebagai DataContext.
Lihat artikel ini sebagai contoh.
sumber
Ada juga cara ini untuk menentukan viewmodel:
<Rant>
Semua solusi yang diusulkan sebelumnya memerlukan yang
MainViewModel
harus memiliki konstruktor tanpa parameter.Microsoft mendapat kesan bahwa sistem dapat dibangun menggunakan konstruktor tanpa parameter. Jika Anda juga berada di bawah kesan itu, lanjutkan dan gunakan beberapa solusi lain.
Bagi mereka yang mengetahui bahwa konstruktor harus memiliki parameter, dan oleh karena itu pembuatan instance objek tidak dapat diserahkan di tangan kerangka kerja ajaib, cara yang tepat untuk menentukan model tampilan adalah yang saya tunjukkan di atas.
</Rant>
sumber