子串绑定String

时间:2012-02-07 12:24:33

标签: c# wpf string binding string-formatting

我想要的是将字符串绑定到textblock或datatrigger(基本上是一些WPF对象)并获取字符串的一部分。该字符串将被分隔。所以,例如,我有这个字符串:

String values = "value1|value2";

我有两个控件 - txtBlock1txtBlock2

在txtBlock1中,我想将Text属性设置为Text={Binding values}。 在txtBlock2中,我想将Text属性设置为Text={Binding values}

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

我读了很多,看起来像这样:Wpf Binding Stringformat to show only first character是典型的建议解决方案。但是对于我在这里想要达到的目标,似乎非常啰嗦。

非常感谢您提前提供任何帮助。

3 个答案:

答案 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 valueget value编写一个函数用于相关索引(扩展上面的方法),但如果你不喜欢这种语法,你提到的IMO对你来说是最好的选择。