2014-04-19 3 views
0

IMultiValueConverter를 Link에서 구현하여 여러 값을 하나의 레이블에 바인딩합니다. 그러나mutiple 값을 하나의 레이블에 바인딩하는 방법은 무엇입니까?

namespace MyApp 
{ 
[ValueConversion(typeof(object), typeof(string))] 
public class ConcatenateFieldsMultiValueConverter : IMultiValueConverter 
{ 
    public object Convert(
      object[] values, 
      Type targetType, 
      object parameter, 
      System.Globalization.CultureInfo culture 
     ) 
{ 
    string strDelimiter; 
    StringBuilder sb = new StringBuilder(); 

    if (parameter != null) 
    { 
    //Use the passed delimiter. 
    strDelimiter = parameter.ToString(); 
    } 
    else 
    { 
    //Use the default delimiter. 
    strDelimiter = ", "; 
    } 

    //Concatenate all fields 
    foreach (object value in values) 
    { 
    if (value != null && value.ToString().Trim().Length > 0) 
    { 
     if (sb.Length > 0) sb.Append(strDelimiter); 
     sb.Append(value.ToString()); 
    } 
    } 

    return sb.ToString(); 
} 

public object[] ConvertBack(
      object value, 
      Type[] targetTypes, 
      object parameter, 
      System.Globalization.CultureInfo culture 
    ) 
{ 
    throw new NotImplementedException("ConcatenateFieldsMultiValueConverter cannot convert back (bug)!"); 
} 
} 
} 

내가 XAML (네임 스페이스의 MyApp)에서 내 창 속성에

xmlns:local="clr-namespace:MyApp" 

를 참조하고 창에

<Window.Resources> 
    <local:ConcatenateFieldsMultiValueConverter x:Key="mvc"/> 
</Window.Resources> 

내 별도의 클래스 ConcatenateFieldsMultiValueConverter가 인식되지 내에서 다음과 같이 정의하고있다 .

이 클래스를 Window.Resources에서 식별 할 수없는 이유는 무엇입니까?

+0

변환기의 네임 스페이스 표시 –

+0

변환기의 네임 스페이스가 추가되었습니다. – user3524628

+0

가 인식되지 않아서 그리 멀지 않았습니다. ConcatenateFieldsMultiValueConverter는 MyApp 네임 스페이스에 없습니다. – user3524628

답변

2

TextBlock을 사용할 수있는 경우 변환기없이 XAML 만 사용하면됩니다.

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0}, {1}"> 
      <Binding Path="Property1"/> 
      <Binding Path="Property2"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

하지만 Label이 아니기 때문에 Content 속성을 사용하고 Text는 사용하지 않으므로 Label에서는 작동하지 않습니다. 따라서 StringFormat을 적용 할 수 없습니다. Label를 들어


당신은 IMultiValueConverter을 사용해야합니다. 댓글에서 언급 한 것처럼 게시 된 코드가 정상적으로 보이기 때문에 프로젝트를 다시 컴파일 해보십시오.

+1

Thx! – Wingjam

0

먼저 컴파일하면 디자인 타임 오류가 발생하는 것처럼 보입니다. 나는 당신의 문제를 재현하려고 시도했다. 그리고 내가 다시 컴파일했을 때 그것은 사라졌다.

또한 런타임에 실행됩니다.

관련 문제