Eu tenho o seguinte XAML abaixo para a janela principal do meu aplicativo WPF, estou tentando definir o tempo de design d:DataContext
abaixo, o que posso executar com êxito em todos os meus vários UserControls, mas esse erro ocorre quando tento fazê-lo no diretório janela...
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>
Uau, que dor! Vamos esperar que o MS coloque algum suporte em tempo de design do VS para x: Bind.
Podemos usar o designer do VS, mas também podemos mudar facilmente para x: Bind em vez de Binding. Aqui está o que eu fiz:
Na minha visualização, adicionei uma propriedade para obter meu ViewModel. Isso faz sentido porque os caminhos x: Bind são relativos à página (ou seja, o objeto View).
Na minha página XAML, adicionei o seguinte
<Page ... >
na parte superior do XAML:Dessa forma, o contexto de dados reais da página é definido como a própria página devido ao
{x:Bind}
. Issox:Bind
ocorre porque é relativo à página e não há caminho especificado.Ao mesmo tempo, devido à
d:DataContext
linha, o designer do VS reflete na classe MyView (sem criar uma instância) para o objetivo da interação do designer do VS. Isso permite o design do VS no MyView, onde você pode rolar para baixo até a propriedade ViewModel, expandi-la e selecionar o item ao qual deseja vincular.Quando você faz tudo isso, o designer do VS cria uma instrução Binding cujo caminho é relativo à View, ou seja, é exatamente o mesmo que o caminho que x: Bind espera. Portanto, se você quiser alternar para x: Bind mais tarde, basta pesquisar e substituir todos "
{Binding
" por "{x:Bind
".Por que precisamos mesmo da
d:DataContext
linha para dizer ao VS que classe olhar? Boa pergunta, já que você pensaria que o VS poderia descobrir a próxima linha que define o DataContext para a Página, usandoDataContext={x:Bind}
. Vá em frente e tente, ele não funciona e nem funciona se você alterar x: Vincular a Vincular em relação a si mesmo.Espero que esta situação seja resolvida pela MS !!
fonte