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