对绑定字符串进行子字符串处理

本文关键字:字符串 处理 绑定 | 更新日期: 2023-09-27 18:23:42

我想要的是将字符串绑定到文本块或数据触发器(基本上是一些WPF对象),并获取字符串的一部分。此字符串将被分隔。例如,我有一个字符串:

String values = "value1|value2";

我有两个控件——txtBlock1txtBlock2

在txtBlock1中,我想像Text={Binding values}一样设置Text属性。在txtBlock2中,我想像Text={Binding values}一样设置Text属性。

显然,这将显示相同的字符串,因此我需要某种StringFormat表达式来添加到子字符串值的绑定中,以便txtBlock1读取value1,txtBlock2读取value2。

我读了很多关于它的文章,看起来是这样的:Wpf绑定字符串格式只显示第一个字符是典型的建议解决方案。但对于我在这里努力实现的目标来说,这似乎太冗长了。

非常感谢您提前提供的帮助。

对绑定字符串进行子字符串处理

这里需要的是一个转换器。添加转换器参数以指示索引。

public class DelimiterConverter : IValueConverter
{
    public object Convert(Object value, Type targetType, object parameter, CultureInfo culture)
    {
        string[] values = ((string)value).Split("|");
        int index = int.Parse((string)parameter);
        return values[index];
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return "";
    }

然后,您只需使用ConverterParameter属性在XAML中指定值的索引。

我将使用一个值转换器,如链接的示例中所述。

但是,如果您想要更直接的东西,您可以使用以下属性和绑定:

public string[] ValueArray
{
    get
    {
        return values.Split('|');
    }
}
<TextBlock Text="{Binding ValueArray[0]}" />
<TextBlock Text="{Binding ValueArray[1]}" />

但是要注意如果values为null或不包含|会发生什么。

如果你只有两个字符串,你可以简单地做:

<TextBlock Text=Text={Binding value1}/>
<TextBlock Text=Text={Binding value2}/>

public string value1
{
   get{return values.Split('|')[0]}
   set{values = value + values.Remove(0, values.IndexOf('|')+1)}
}
public string value2 ....
public string values ...

事实上,您可以为set valueget value编写相关索引的函数(扩展上述方法),但如果您不喜欢这种语法,您所引用的IMO是您的最佳选择。