usercontrol datacontext不同的用法

时间:2013-08-16 07:13:05

标签: wpf data-binding user-controls datacontext

我写的时候:

    <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>

with 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>

它不起作用!为什么呢?

提前感谢。

1 个答案:

答案 0 :(得分: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