Mam następujący XAML poniżej dla głównego okna w mojej aplikacji WPF, próbuję ustawić czas projektowania d:DataContext
poniżej, co mogę z powodzeniem zrobić dla wszystkich moich różnych UserControl, ale daje mi ten błąd, gdy próbuję to zrobić na okno...
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, co za ból! Miejmy nadzieję, że MS wprowadzi wsparcie dla x: Bind w czasie projektowania VS.
Możemy korzystać z projektanta VS, ale także łatwo przełączać się na x: Bind zamiast Binding. Oto co zrobiłem:
W moim widoku dodałem właściwość, aby uzyskać mój ViewModel. Ma to sens, ponieważ ścieżki x: Bind są względne względem strony (tj. Obiektu View).
Na mojej stronie XAML dodałem następujące elementy
<Page ... >
na górze XAML:W ten sposób rzeczywisty kontekst danych strony jest ustawiany na samą stronę ze względu na
{x:Bind}
. To dlatego, żex:Bind
jest względny do strony i nie podano żadnej ścieżki.Jednocześnie, ze względu na
d:DataContext
linię, projektant VS zastanawia się nad klasą MyView (bez tworzenia instancji) na potrzeby interakcji projektanta VS. Umożliwia to projektowanie VS z MyView, gdzie można przewinąć w dół do właściwości ViewModel, rozwinąć ją i wybrać element, z którym chcesz się połączyć.Kiedy to wszystko zrobisz, projektant VS utworzy instrukcję Binding, której ścieżka jest względna w stosunku do widoku, tzn. Jest dokładnie taka sama, jak ścieżka oczekiwana przez x: Bind. Tak więc, jeśli chcesz przełączyć się na x: Bind później, możesz po prostu wyszukać i zastąpić wszystkie „
{Binding
” „{x:Bind
” „ ”.Dlaczego potrzebujemy
d:DataContext
linii, aby powiedzieć VS, na którą klasę patrzeć? Dobre pytanie, ponieważ można by pomyśleć, że VS może dowiedzieć się, że następny wiersz ustawia DataContext na stronę, używającDataContext={x:Bind}
. Śmiało, spróbuj, to nie działa i nie działa, jeśli zmienisz x: Bind na Binding w stosunku do siebie.Mam nadzieję, że ta sytuacja zostanie oczyszczona przez stwardnienie rozsiane !!
źródło