wpf - updatesourcetrigger




在窗口上设置设计时间DataContext是否给出编译器错误? (2)

哇,真是痛苦! 让我们希望MS为x:绑定提供一些VS设计时支持。

我们能够使用VS设计器,但也能够轻松切换到x:绑定而不是绑定。 以下是我所做的:

  • 在我的视图中,我添加了一个属性来获取我的ViewModel。 这是有道理的,因为x:绑定路径相对于页面(即视图对象)。

  • 在我的Page XAML中,我将以下内容添加到XAML顶部的<Page ... >中:

    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=local:MyView, IsDesignTimeCreatable=False}" 
    DataContext="{x:Bind}"
    

这样,由于{x:Bind} ,页面的实际数据上下文被设置为页面本身。 这是因为x:Bind是相对于页面而且没有路径。

同时,由于d:DataContext行,VS设计师反映了MyView类(不创建实例)以达到VS设计器交互的目的。 这样可以从MyView中进行VS设计,然后可以向下滚动到ViewModel属性,展开它并选择要绑定到的项目。

当你这么做的时候,VS设计者将创建一个绑定语句,其路径与视图相关,也就是说,它恰好与x:Bind所期望的路径完全相同。 因此,如果您想稍后切换到x:Bind,您可以搜索并用“ {x:Bind ”替换所有“ {Binding ”。

为什么我们甚至需要d:DataContext行来告诉VS要看什么类? 好问题,因为你会认为VS可以找出下一行将DataContext设置为Page,使用DataContext={x:Bind} 。 继续尝试吧,它不起作用,并且如果您更改x:绑定到相对于自我的绑定,它也不起作用。

希望这种情况将得到MS清理!

我在下面的WPF应用程序的主窗口中使用了下面的XAML,我试图设置下面的设计时间d:DataContext ,我可以成功地为所有不同的UserControls执行这些操作,但是当我尝试执行操作时会出现此错误它在窗户上...

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>

我需要将mc:Ignorable="d"属性添加到Window标记。 基本上我学到了一些新东西。 Expression Blend / Visual Studio设计器承认的d:名称空间前缀实际上真正的编译器/ xaml解析器忽略/“注释掉了

<Window 
...
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
...
/>

以下是取自

内森,亚当(2010-06-04)。 WPF 4发动(Kindle Locations 1799-1811)。 萨姆斯。 Kindle版。

标记兼容性

标记兼容性XML名称空间( http://schemas.openxmlformats.org/markup-compatibility/2006 ,通常与mc前缀一起使用)包含一个Ignorable属性,指示XAML处理器忽略指定名称空间中的所有元素/属性(如果它们可以“不能解析为它们的.NET类型/成员。 (该名称空间还具有一个ProcessContent属性,该属性在忽略的名称空间内覆盖可忽略的特定类型。)

Expression Blend利用此功能来执行诸如将设计时属性添加到可在运行时忽略的XAML内容。

mc:Ignorable可以给定空格分隔的命名空间列表,而mc:ProcessContent可以给出空格分隔的元素列表。 当XamlXmlReader遇到无法解析的可忽略内容时,它不会为其报告任何节点。 如果可以解决可忽略的内容,则会正常报告。 因此,消费者不需要做任何特别的事情来正确处理标记兼容性。





wpf