0

当我写:

    <UserControl>
        <UserControl.DataContext>
            <loca:DataBindingDemo></loca:DataBindingDemo>
        </UserControl.DataContext>

        <TextBox   Text="{Binding Path=CurrentTime}" Height="30" Background="Aqua" Margin="133,141,169,140"></TextBox>

    </UserControl>

使用 xmlns:loca="clr-namespace:MyClock"

这是正确的,没有问题,但是当我写:

 <UserControl  DataContext="{Binding Source=clr-namespace:MyClock.DataBindingDemo}">
        <!--
        <UserControl.DataContext>
            <loca:DataBindingDemo></loca:DataBindingDemo>
        </UserControl.DataContext>
        -->

        <TextBox   Text="{Binding Path=CurrentTime}" Height="30" Background="Aqua" Margin="133,141,169,140"></TextBox>

    </UserControl>

或者

    <UserControl  DataContext="{Binding  Source=StaticResource, Path=clr-namespace:MyClock.DataBindingDemo}">
        <!--
        <UserControl.DataContext>
            <loca:DataBindingDemo></loca:DataBindingDemo>
        </UserControl.DataContext>
        -->

        <TextBox   Text="{Binding Path=CurrentTime}" Height="30" Background="Aqua" Margin="133,141,169,140"></TextBox>

    </UserControl>

这没用!为什么?

提前致谢。

4

1 回答 1

1

这没用!为什么?

clr-namespace:用于创建到自定义类和程序集的命名空间映射,不能像在标记扩展中那样直接使用,它不是命名空间前缀。

编辑:您不能像这样直接在您的标记扩展中使用程序集中的本地类型。

首先,您必须像在您的问题中所做的那样创建一个名称空间映射,如下所示xmlns:local="clr-namepsace:YOUR_ASSEMBLY_NAME.NAMESPACE_CONTAINING_TYPE_YOU_WANT"

然后您可以在标记扩展中使用它们,如下所示:

<UserControl DataContext="{Binding Source=local:MyClock.DataBindingDemo}">
//                                          ^
//                                          |
//                                   Notice namespace using here
于 2013-08-16T07:36:58.163 回答