2012-02-07 12 views
1

내가 원하는 것은 문자열을 textblock 또는 datatrigger (기본적으로 일부 WPF 개체)에 바인딩하고 문자열의 일부를 가져 오는 것입니다. 이 문자열은 구분됩니다. 따라서, 예를 들어,이 문자열이 있습니다바운드 문자열 부분 문자열

String values = "value1|value2"; 

을 그리고 나는 두 개의 컨트롤이 - txtBlock1txtBlock2을.

txtBlock1에서 Text={Binding values}과 같은 Text 속성을 설정하고 싶습니다. txtBlock2에서 Text={Binding values}과 같은 Text 속성을 설정하고 싶습니다.

분명히 이것은 같은 문자열을 표시하므로 txtBlock1이 value1을 읽고 txtBlock2이 value2를 읽도록이 바인딩에 부분 문자열 값을 추가하는 StringFormat 표현식이 필요합니다.

나는 이것에 대해 잘 읽었으며 다음과 같이 보입니다 : Wpf Binding Stringformat to show only first character이 전형적인 제안 된 해결책입니다. 그러나 나는 여기에서 성취하려고 노력하고있는 것에 대해 대단히 오래간 것 같습니다.

미리 도움을 주셔서 감사합니다.

답변

1

여기 변환기가 필요합니다. 인덱스를 나타내는 converter 매개 변수를 추가하십시오.

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}/> 

하고 (접근 위의 확장) 관련 인덱스 set valueget value하는 기능을 쓸 수있는 사실

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

, 그러나이 구문이 마음에 들지 않는다면, IMO가 추천 한 것이 최선의 선택입니다.

+0

문자열을 바인딩하는 textblock은 목록 상자 항목에 대한 datatemplate의 일부로 사용됩니다. 따라서 문자열은 각 항목마다 다릅니다. 답장을 보내 주셔서 감사합니다. 어떻게 든 솔루션을 사용할 수있을 것입니다. – SkonJeet