我想要的是将字符串绑定到textblock或datatrigger(基本上是一些WPF对象)并获取字符串的一部分。该字符串将被分隔。所以,例如,我有这个字符串:
String values = "value1|value2";
我有两个控件 - txtBlock1
和txtBlock2
。
在txtBlock1中,我想将Text属性设置为Text={Binding values}
。
在txtBlock2中,我想将Text属性设置为Text={Binding values}
。
显然这将显示相同的字符串,因此我需要某种StringFormat表达式来添加到此子字符串值的绑定,以便txtBlock1
读取value1而txtBlock2
读取value2。
我读了很多,看起来像这样:Wpf Binding Stringformat to show only first character是典型的建议解决方案。但是对于我在这里想要达到的目标,似乎非常啰嗦。
非常感谢您提前提供任何帮助。
答案 0 :(得分:1)
这里需要的是转换器。 添加转换器参数以指示索引。
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中值的索引。
答案 1 :(得分:1)
我会使用值转换器,如链接的示例中所述。
但是如果你想要更直接的东西,你可以使用以下属性和绑定:
public string[] ValueArray
{
get
{
return values.Split('|');
}
}
<TextBlock Text="{Binding ValueArray[0]}" />
<TextBlock Text="{Binding ValueArray[1]}" />
但如果values
为空或不包含|
,请注意可能发生的情况。
答案 2 :(得分:1)
如果您只有两个字符串,则可以执行以下操作:
<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对你来说是最好的选择。