Silverlight 绑定

发布于 2024-08-11 00:40:28 字数 1552 浏览 4 评论 0原文

我有一个 Silverlight 页面,在其后面使用 MVVM 来处理所有正在发生的数据位。

使用以下方式为页面设置数据上下文:

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

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

这一切都很好。

现在我有一个像这样的 DataForm:

        <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 属性。第一个 DataField 绑定到 NewClient.ClientName。我想将第二个 DataField 绑定到根 ViewModel 挂起的属性。

我知道绑定时可以传入“Source”参数,如果我有虚拟机的静态资源或类似资源,我可以将其指向该参数,但我没有。如何将此绑定与父虚拟机上的属性链接起来?


编辑

在下面由 Jobi 发表的帖子后,我尝试了以下操作:

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

和我的顶级控制:

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

没有骰子让这个工作......

I've a Silverlight page using a MVVM behind it to handle all the data bits going on.

The data context is set for the page using:

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

ServiceLocator being a service that allows me to create and inject the appropriate VM using an IoC container.

This all works fine.

Now I have a DataForm like so:

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

OK, so this dataform binds to the NewClient property on my ViewModel. The first DataField binds to the NewClient.ClientName. The second DataField I'd like to bind to a property that hangs of the root ViewModel.

I know there is the 'Source' parameter that you can pass in when binding, if I had a static resource of the VM or similar I could point it to that, but I don't. How can I link this binding up with property on the parent VM?


Edit

After a post by Jobi below, I've tried the following:

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

And my top level control:

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

No dice with getting this to work...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若无相欠,怎会相见 2024-08-18 00:40:28

您需要的是 DataContextProxy 由 Dan Wahlin 创建。问题是,一旦进入数据表单,您就有了一个新的数据上下文。没有简单的方法可以返回视图的数据上下文。数据上下文代理可以让你轻松地做到这一点,我已经使用它相当多了,发现它工作得很好。

What you need is a DataContextProxy which was created by Dan Wahlin. The problem is that once you get into the data form, you have a new data context. There is no easy way to reach back up to the view's data context. The data context proxy allows you to easily do this and I've used it quite a bit found it works great.

回首观望 2024-08-18 00:40:28

在第二个 TextBox 上,您可以将 ElementName 绑定到父 VM 已具有 DataContext 的根元素。

<TextBox DataContent="{Binding DataContext, ElementName=rootLevelControl}" Text="{Binding property}"

On the second TextBox you can do an ElementName binding to the root element where the Parent VM has already DataContext to.

<TextBox DataContent="{Binding DataContext, ElementName=rootLevelControl}" Text="{Binding property}"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文