Saya memiliki XAML berikut di bawah ini untuk jendela utama dalam aplikasi WPF saya, saya mencoba untuk mengatur waktu desain di d:DataContext
bawah ini, yang saya dapat berhasil lakukan untuk semua berbagai UserControls saya, tetapi itu memberi saya kesalahan ini ketika saya mencoba untuk melakukannya pada jendela...
Error 1 The property 'DataContext' must be in the default namespace or in the element namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Line 8 Position 9. C:\dev\bplus\PMT\src\UI\MainWindow.xaml 8 9 UI
<Window x:Class="BenchmarkPlus.PMT.UI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:UI="clr-namespace:BenchmarkPlus.PMT.UI"
xmlns:Controls="clr-namespace:BenchmarkPlus.PMT.UI.Controls"
d:DataContext="{d:DesignInstance Type=UI:MainViewModel, IsDesignTimeCreatable=True}"
Title="MainWindow" Height="1000" Width="1600" Background="#FF7A7C82">
<Grid>
<!-- Content Here -->
</grid>
</Window>
Wow, sungguh menyebalkan! Mari berharap MS memberikan dukungan waktu desain VS untuk x: Bind.
Kami dapat menggunakan perancang VS tetapi juga dapat beralih dengan mudah ke x: Bind bukan Binding. Inilah yang saya lakukan:
Di View saya, saya menambahkan properti untuk mendapatkan ViewModel saya. Ini masuk akal karena x: Bind path relatif terhadap Halaman (yaitu objek View).
Di Halaman XAML saya, saya menambahkan yang berikut ke
<Page ... >
bagian atas XAML:Dengan cara ini, konteks data aktual Halaman diatur ke Halaman itu sendiri karena
{x:Bind}
. Itu karenax:Bind
relatif terhadap Halaman dan tidak ada jalur yang diberikan.Pada saat yang sama, karena
d:DataContext
garis, perancang VS merefleksikan kelas MyView (tanpa membuat instance) untuk tujuan interaksi perancang VS. Ini memungkinkan VS desain dari MyView, di mana Anda kemudian dapat menggulir ke bawah ke properti ViewModel, memperluasnya dan memilih item yang ingin Anda ikat.Ketika Anda melakukan semua itu, perancang VS akan membuat pernyataan Binding yang jalurnya relatif terhadap tampilan, yaitu kebetulan persis sama dengan jalur yang x: Bind harapkan. Jadi, jika Anda ingin beralih ke x: Bind nanti, Anda bisa mencari dan mengganti semua "
{Binding
" dengan "{x:Bind
".Mengapa kita bahkan perlu
d:DataContext
garis untuk memberi tahu VS kelas apa yang harus dilihat? Pertanyaan yang bagus, karena Anda akan berpikir bahwa VS bisa mengetahui baris selanjutnya yang menetapkan DataContext ke Halaman, menggunakanDataContext={x:Bind}
. Silakan dan coba, itu tidak berhasil dan juga tidak berfungsi jika Anda mengubah x: Bind ke Binding relatif terhadap diri.Semoga situasi ini akan dibersihkan oleh MS !!
sumber