Ich habe die folgende XAML unten für das Hauptfenster in meiner WPF-Anwendung. Ich versuche, die Entwurfszeit d:DataContext
unten festzulegen, die ich für alle meine verschiedenen UserControls erfolgreich ausführen kann, aber es gibt mir diesen Fehler, wenn ich versuche, dies auf der zu tun Fenster...
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, was für ein Schmerz! Hoffen wir, dass MS x: Bind in VS-Design-Zeit unterstützt.
Wir können den VS-Designer verwenden, aber auch einfach zu x: Bind anstatt Binding wechseln. Folgendes habe ich getan:
In meiner Ansicht habe ich eine Eigenschaft hinzugefügt, um mein ViewModel abzurufen. Dies ist sinnvoll, da x: Bindungspfade relativ zur Seite (dh zum View-Objekt) sind.
In meiner Seite XAML habe ich
<Page ... >
oben in der XAML Folgendes hinzugefügt :Auf diese Weise wird der tatsächliche Datenkontext der Seite aufgrund der auf die Seite selbst festgelegt
{x:Bind}
. Das liegt daran, dassx:Bind
es relativ zur Seite ist und kein Pfad angegeben ist.Gleichzeitig
d:DataContext
reflektiert der VS-Designer aufgrund der Linie die MyView-Klasse (ohne eine Instanz zu erstellen) zum Zweck der VS-Designer-Interaktion. Auf diese Weise können Sie VS-Designs in MyView entwerfen, wo Sie dann zur ViewModel-Eigenschaft scrollen, sie erweitern und das Element auswählen können, an das Sie binden möchten.Wenn Sie dies alles tun, erstellt der VS-Designer eine Bindungsanweisung, deren Pfad relativ zur Ansicht ist, dh genau der Pfad, den x: Bind erwartet. Wenn Sie später zu x: Bind wechseln möchten, können Sie einfach alle "
{Binding
" durch "{x:Bind
" suchen und ersetzen .Warum brauchen wir überhaupt die
d:DataContext
Zeile, um VS mitzuteilen, welche Klasse wir betrachten sollen? Gute Frage, da Sie denken würden, dass VS in der nächsten Zeile herausfinden könnte, dass der DataContext mithilfe von auf die Seite gesetzt wirdDataContext={x:Bind}
. Probieren Sie es aus, es funktioniert nicht und es funktioniert auch nicht, wenn Sie x: Bind to Binding relativ zu self ändern.Hoffentlich wird diese Situation von MS aufgeräumt !!
quelle