У меня есть следующий XAML ниже для главного окна в моем приложении WPF, я пытаюсь установить время разработки d:DataContext
ниже, что я могу успешно сделать для всех моих различных пользовательских элементов управления, но это дает мне эту ошибку, когда я пытаюсь сделать это на окно...
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>
Вау, какая боль! Будем надеяться, что MS добавит поддержку VS: время разработки для x: Bind.
Мы должны иметь возможность использовать конструктор VS, а также легко переключаться на x: Bind вместо Binding. Вот что я сделал:
В моем представлении я добавил свойство для получения моей модели представления. Это имеет смысл, поскольку пути x: Bind относятся к странице (то есть объекту View).
На своей странице XAML я добавил следующее
<Page ... >
в верхней части XAML:Таким образом, фактический контекст данных страницы устанавливается на саму страницу из-за
{x:Bind}
. Это потому, чтоx:Bind
относится к странице и не указан путь.В то же время, из-за
d:DataContext
линии, конструктор VS размышляет над классом MyView (без создания экземпляра) с целью взаимодействия дизайнера VS. Это позволяет проектировать VS из MyView, где вы можете затем прокрутить вниз до свойства ViewModel, развернуть его и выбрать элемент, с которым вы хотите связать.Когда вы сделаете все это, конструктор VS создаст оператор Binding, путь которого относительно View, то есть он точно совпадает с путем, ожидаемым x: Bind. Итак, если вы хотите позже переключиться на x: Bind, вы можете просто найти и заменить все "
{Binding
" на "{x:Bind
".Почему нам даже нужна
d:DataContext
строка, чтобы сказать VS, на какой класс смотреть? Хороший вопрос, поскольку вы могли бы подумать, что VS может выяснить, что следующая строка устанавливает DataContext для страницы, используяDataContext={x:Bind}
. Попробуйте, это не работает и не работает, если вы измените x: Bind to Binding относительно себя.Надеюсь, эта ситуация будет исправлена MS!
источник