银光装订

标签 silverlight mvvm binding dataform

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

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

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

ServiceLocator 是一项服务,它允许我使用 IoC 容器创建和注入(inject)适当的 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>

好的,所以这个数据表单绑定(bind)到我的 ViewModel 上的 NewClient 属性。第一个 DataField 绑定(bind)到 NewClient.ClientName。我想绑定(bind)到根 ViewModel 挂起的属性的第二个 DataField。

我知道绑定(bind)时可以传入“源”参数,如果我有虚拟机的静态资源或类似资源,我可以指出它,但我没有。如何将此绑定(bind)与父 VM 上的属性链接?

编辑

在下面 Jobi 的帖子之后,我尝试了以下方法:
<TextBox DataContext="{Binding DataContext, ElementName=root}"  Text="{Binding MyProperty}" />

我的顶级控制:
x:Name="root"
DataContext="{Binding AddNewClientViewModel, Source={StaticResource ServiceLocator}}"

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

最佳答案

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

关于银光装订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695643/

相关文章:

c# - 如何创建 ItemCollection 的新实例

c# - 如何在不同的类中检查 WPF 元素的属性?

c# - 使用 MVVM lightMessenger 时,应用程序调用了为不同线程编码的接口(interface)

.net - 为什么 ActualSize 没有在 WPF 上更新其值?

c# - 以编程方式在 Listview 中选择项目,该项目绑定(bind)到数据表并且默认按排序顺序排列?

silverlight - WCF RIA 服务查询速度慢

silverlight - 如何更改 Silverlight TextBox 中的制表符宽度

silverlight - 使用网络浏览器上传大于 2Gb 的文件的选项

c# - 根据对象枚举值将图像绑定(bind)到组合框

silverlight - 将多个样式添加到 Silverlight 控件