代码之家  ›  专栏  ›  技术社区  ›  ChadT

Silverlight绑定

  •  1
  • ChadT  · 技术社区  · 15 年前

    我有一个Silverlight页面,它后面有一个MVVM来处理正在进行的所有数据位。

    为页面设置的数据上下文使用:

    DataContext="{Binding AddNewClientViewModel, Source={StaticResource ServiceLocator}}"
    

    ServiceLocator是一种服务,允许我使用IOC容器创建和注入适当的VM。

    这一切都很好。

    现在我有了这样的数据表单:

            <df:DataForm CurrentItem="{Binding NewClient}" AutoGenerateFields="False"  >
            <df:DataForm.NewItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <df:DataField>
                            <TextBox Text="{Binding ClientName}" />
                        </df:DataField>
                        <df:DataField>
                            <TextBox Text="{Binding Property_on_the_VM_not_on_NewClient}" />
                        </df:DataField>
                    </StackPanel>
                </DataTemplate>
            </df:DataForm.NewItemTemplate>
        </df:DataForm>
    

    好的,所以这个数据表单绑定到我的viewModel上的newclient属性。第一个数据字段绑定到newclient.clientname。我要绑定到挂起根视图模型的属性的第二个数据字段。

    我知道有一个“source”参数可以在绑定时传递,如果我有一个虚拟机的静态资源或类似的资源,我可以将它指向那个,但我没有。我如何将这个绑定与父虚拟机上的属性链接起来?


    编辑

    在下面的Jobi发帖后,我尝试了以下方法:

    <TextBox DataContext="{Binding DataContext, ElementName=root}"  Text="{Binding MyProperty}" />
    

    我的顶级控制:

    x:Name="root"
    DataContext="{Binding AddNewClientViewModel, Source={StaticResource ServiceLocator}}"
    

    要想让这一切成功,就不要冒险…

    2 回复  |  直到 15 年前
        1
  •  2
  •   Bryant    15 年前

    你需要的是 DataContextProxy which was created by Dan Wahlin .问题是,一旦进入数据表单,就有了新的数据上下文。没有一种简单的方法可以追溯到视图的数据上下文。数据上下文代理允许您轻松地完成这项工作,我已经使用了很多发现它工作得很好。

        2
  •  0
  •   Jobi Joy    15 年前

    在第二个文本框中,可以对父VM已经具有DataContext的根元素执行elementName绑定。

    <TextBox DataContent="{Binding DataContext, ElementName=rootLevelControl}" Text="{Binding property}"
    
    推荐文章