@romaro

Почему вьюха не видим вьюмодель в том же неймспейсе?

Создал простую вьюмодель:
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace GuiTest.Windows.TestBindingWindow {
    internal class TestBindingWindowContext : INotifyPropertyChanged {
        private string _Login = String.Empty;

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public string Login
        {
            get => _Login;
            set {
                if (value != _Login) {
                    _Login = value;
                    NotifyPropertyChanged();
                }
            }
        }
    }
}


Пробую подключить ее во вью:
<Window x:Class="GuiTest.Windows.TestBindingWindow.TestBindingWindowView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ctx="clr-namespace:GuiTest.Windows.TestBindingWindow"
        mc:Ignorable="d"
        Title="TestBindingWindowView" Height="450" Width="800">
    <Window.DataContext>
        <ctx:TestBindingWindowContext/>
    </Window.DataContext>
    <Grid>
        
    </Grid>
</Window>


Но получаю ошибку:

Error XDG0008 The name "TestBindingWindowContext" does not exist in the namespace "clr-namespace:GuiTest.Windows.TestBindingWindow".


Я как-то неправильно работаю с неймспейсами?

UPD. Почему-то проблема решается сразу после первой сборки приложения. Т.е. я запускаю сборку, несмотря на наличие ошибки в ErrorList и все собирается успешно, привязки начинают работать, ошибка исчезает. Как это работает под капотом?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Да, всё верно поняли. Дизайнер XAML не совсем "дружит" с кодом - он ищет только те, которые уже скомпилированы. Видимо, дизайнер ищет классы стандартным способом - через тип Type (и т.п.), а тот ищет среди сборок (exe/dll) проекта.

Нужно сразу скомпилировать новый тип, даже просто пустой class Test {} - и всё, будет работать. Лучше делать это пораньше - до того, как пытаетесь связать его в xaml, иначе билд не срабатывает, и приходится выпиливать его из xaml-а.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы