Tengo el siguiente XAML a continuación para la ventana principal en mi aplicación WPF, estoy tratando de configurar el tiempo de diseño a d:DataContext
continuación, que puedo hacer con éxito para todos mis diversos UserControls, pero me da este error cuando intento hacerlo en el ventana...
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, que dolor! Esperemos que MS ponga algo de soporte de tiempo de diseño VS para x: Bind.
Para poder usar el diseñador VS pero también poder cambiar fácilmente a x: Bind en lugar de Binding. Esto es lo que hice:
En mi Vista, agregué una propiedad para obtener mi ViewModel. Esto tiene sentido porque x: las rutas de enlace son relativas a la página (es decir, el objeto Ver).
En mi página XAML, agregué lo siguiente
<Page ... >
en la parte superior de XAML:De esta manera, el contexto de datos real de la página se establece en la página misma debido a
{x:Bind}
. Esto se debe a quex:Bind
es relativo a la página y no hay un camino dado.Al mismo tiempo, debido a la
d:DataContext
línea, el diseñador VS reflexiona sobre la clase MyView (sin crear una instancia) con el propósito de la interacción del diseñador VS. Esto permite el diseño de VS desde MyView, donde puede desplazarse hacia abajo hasta la propiedad ViewModel, expandirlo y seleccionar el elemento al que desea enlazar.Cuando hace todo eso, el diseñador de VS creará una instrucción Binding cuya ruta es relativa a la Vista, es decir, es exactamente la misma que la ruta que espera x: Bind. Por lo tanto, si desea cambiar a x: Bind más adelante, puede buscar y reemplazar todo "
{Binding
" con "{x:Bind
".¿Por qué necesitamos la
d:DataContext
línea para decirle a VS qué clase mirar? Buena pregunta, ya que pensaría que VS podría descubrir que la siguiente línea establece el DataContext en la página, utilizandoDataContext={x:Bind}
. Siga adelante y pruébelo, no funciona y tampoco funciona si cambia x: Bind to Binding en relación con uno mismo.¡Esperemos que esta situación sea limpiada por MS!
fuente