2012-02-07 218 views
1

我想要的是將字符串綁定到文本塊或數據觸發器(基本上是一些WPF對象)並獲取字符串的一部分。該字符串將被分隔。因此,舉例來說,我有這個字符串:綁定字符串的子字符串

String values = "value1|value2"; 

我有兩個控件 - txtBlock1txtBlock2

在txtBlock1我想設置文本屬性,如Text={Binding values}。 在txtBlock2我想設置文本屬性,如Text={Binding values}

很明顯,所以我需要某種形式的StringFormat表達的加入使txtBlock1讀取value1和txtBlock2讀取值2此結合子值,這將顯示相​​同的字符串。

我已經有一個很好的閱讀,它看起來像這樣:Wpf Binding Stringformat to show only first character是典型的建議解決方案。但對於我想在這裏實現的目標來說,它似乎非常囉嗦。

非常感謝任何幫助提前。

回答

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

我會使用一個值轉換器,如您鏈接的示例中所述。

但是,如果你想要的東西,更簡單,你可以使用下面的屬性和綁定:

public string[] ValueArray 
{ 
    get 
    { 
     return values.Split('|'); 
    } 
} 

<TextBlock Text="{Binding ValueArray[0]}" /> 
<TextBlock Text="{Binding ValueArray[1]}" /> 

不過要小心,如果values null或不包含|會發生什麼。

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是你的最佳選擇。

+0

我綁定字符串的文本塊將作爲列表框項目的數據項的一部分。所以每個項目的字符串都會有所不同。非常感謝您的回覆,我確信我可以在某處使用您的解決方案。 – SkonJeet 2012-02-07 13:08:15