c# - C# WPF 绑定深度/子对象路径
问题描述
我有一个看起来像这样的 WPF 控件:
<UserControl x:Class="MyApp.MyControl" ...etc...>
<StackPanel>
<Label Content="Contact Information" />
<TextBox x:Name="txtContactAddress" Text="{Binding Path=Contact.Address}">
<Label Content="Organization Information" />
<TextBox x:Name="txtOrgAddress" Text="{Binding Path=Organization.Address}">
</StackPanel>
</UserControl>
幕后代码如下:
namespace MyApp
{
public class MyControl : UserControl
{
public DataBindings Data = new DataBindings();
public MyControl()
{
InitializeComponent();
this.DataContext = Data;
}
}
public class DataBindings
{
public ContactData Contact;
public OrganizationData Organization;
public OtherData Other;
public DataBindings()
{
Organization = new OrganizationData();
Organization.Address = "123 Test Street";
Contact = new ContactData();
Contact.Address = "456 Test Street";
}
}
}
基于我一直在阅读的各种教程和文章,我的期望是绑定会在用户控件上找到 DataContext 属性,然后从那里,它会查看路径并跟随子对象,以便值在 MyControl.DataContext.Contact.Address 中找到的将显示在 MyControl.txtContactAddress 中。
显然,这不会发生,如果我只是将 Path 变成一个属性,我 - 可以 - 让它工作:
<TextBox x:Name="txtContactAddress" Text="{Binding Path=Address}">
...然后只需将 DataContext 直接设置为 DataBindings.Contact 子对象:
public MyControl()
{
InitializeComponent();
this.DataContext = Data.Contact;
}
然而,这打破了对本组织的约束。我只是错过了 Path 元素的一些基本语法吗?
编辑:这不是重复的: 为什么 WPF 支持绑定到对象的属性,但不支持绑定到字段?
该答案可能会解决这个问题,但它假设用户已经知道 field-vs-property 是根本原因。换句话说,当我开始时,我不会知道问题在于我使用了字段,所以我不会找到其他答案。然而,这个问题正在努力确定根本原因并导致其他答案。我建议不要将此标记为重复。
解决方案
没关系,您只是想念 get 和 set 属性访问器:
public class DataBindings
{
public ContactData Contact { get; set; }
public OrganizationData Organization { get; set; }
public OtherData Other { get; set; }
public DataBindings()
{
Organization = new OrganizationData();
Organization.Address = "123 Test Street";
Contact = new ContactData();
Contact.Address = "456 Test Street";
}
}
推荐阅读
- c - 我通过引用传递结构错误吗?
- java - 如何替换字符串中的字母?
- php - 如何修复 codeigniter 中的易受攻击问题?(权限提升、会话重放攻击和 HSTS 丢失)
- php - 如何使用 Imagick 编写 png 文件
- c# - 从字符串序列化对象?
- node.js - 节点没有渲染转译的 Angular 项目
- ansible - 嗨,有没有办法在 ansible 的同一任务中使用 2 个不同的变量文件?
- java - 我怎样才能连接这两个类?
- ruby-on-rails - 从另一个表(ruby rails)按行排序查询
- android - Nativescript -- 在警报和对话框中隐藏 Android 状态栏