c# - 有没有办法将 2 个(或更多)WPF 项绑定(bind)到 C# 中的单个属性?

标签 c# wpf data-binding

我的类包含一个 address 属性(字符串类型),但我的 WPF 窗口包含几个地址文本框(门牌号、街道名称和可选的第二行地址 - 城镇和邮政编码类中确实有单独的字段)。 我想将它们全部放入类中的单个 address 字符串中,用逗号分隔(例如“43, Whitefield Road, Princesshire”)。有没有办法通过绑定(bind)或仅在代码中手动执行此操作?

enter image description here

最佳答案

将所有字段绑定(bind)到类的地址属性,然后使用值转换器来确定地址的哪些组件适用。在转换器中有一个属性允许您确定要操作的子字符串:

public class AddressSeparatorConverter : IValueConverter
{
    ///<summary>
    /// Index of the substring element of the address to be manipulated (read/edited).
    ///</summary>
    public int SubStringIdx { get; set; }

    ...
}

然后当您执行转换时,您只需使用 , 分隔符拆分字符串并返回由 SubStringIdx 指定的子字符串:

address.Split(',')[SubStringIdx]

当您绑定(bind)到可编辑控件时,您需要确保为 IValueConverter.Convert 提供实现。和 IValueConverter.ConvertBack方法。

要更进一步,您可以在 Converters.xaml 文件中提供不同的转换器定义来处理地址的各种子组件:

<converters:AddressSeparatorConverter x:Key="AddressToHouseNumberConverter" SubStringIdx="0"/>
<converters:AddressSeparatorConverter x:Key="AddressToStreetNameConverter" SubStringIdx="1"/>
...

然后当绑定(bind)到您的控件时,您将通过其键调用适当的转换器:

<TextBox Text="{Binding Address, Converter={StaticResource AddressToStreetNameConverter}}"/>

我现在无法访问 IDE,所以请接受代码片段可能不是 100% 正确,但你应该了解它的要点。

关于c# - 有没有办法将 2 个(或更多)WPF 项绑定(bind)到 C# 中的单个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34833062/

相关文章:

Citrix 上的 WPF 应用程序

c# - 如何在 WPF 数据网格中为每列添加一个 ContextMenu

c# - 了解数据绑定(bind)如何在 UserControl 的 DependencyProperty 及其宿主应用程序的属性之间工作

c# - 将 Python 代码注入(inject)进程

c# - 互斥对象创建

wpf - WPF中的动画背景控制?

c# - NHibernate:两次映射单个列

c# - Microsoft.Bcl.Immutable 中的 ImmutableList<T> Remove 方法性能低下

c# - 两个事件的一个函数

.net - 您可以将列表框中的选定项绑定(bind)到 WPF 中的单独对象吗?