Silverlight 绑定
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要的是 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.
在第二个 TextBox 上,您可以将 ElementName 绑定到父 VM 已具有 DataContext 的根元素。
On the second TextBox you can do an ElementName binding to the root element where the Parent VM has already DataContext to.