对绑定字符串进行子字符串处理
本文关键字:字符串 处理 绑定 | 更新日期: 2023-09-27 18:23:42
我想要的是将字符串绑定到文本块或数据触发器(基本上是一些WPF对象),并获取字符串的一部分。此字符串将被分隔。例如,我有一个字符串:
String values = "value1|value2";
我有两个控件——txtBlock1
和txtBlock2
。
在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 value
和get value
编写相关索引的函数(扩展上述方法),但如果您不喜欢这种语法,您所引用的IMO是您的最佳选择。