2010-08-07 4 views
2

저는 WPF 및 MVVM (이번 주에 실험을 시작했습니다)을 처음 사용하고 런타임에 이미지 리소스를 바인드하려고합니다. 내가 표시하기 위해 노력하고있어 항목은 항목의 유형이나 상태를 나타내는 열거 속성을 포함 : 지금까지 내가 이미지의 원본 속성을 알려진StringFormat을 사용하는 WPF 이미지 소스 바인딩

public class TraceEvent 
{ 
    /// <summary> 
    /// Gets or sets the type of the event. 
    /// </summary> 
    /// <value>The type of the event.</value> 
    public TraceEventType EventType { get; set; } 
} 

을 열린 우리당 객체를 문자열을 받아 반환 값 변환기를 가지고 .

<Image Source="{Binding Path=EventType, StringFormat={}/AssemblyName;component/Images/{0}Icon.ico}" /> 

그럼 왜 위의 작동하지 않습니까? uri에 직접 입력하면 (바인딩없이) 이미지가 완벽하게 표시됩니다. 내가 할 경우 사실, TextBlock의 바인딩도 문제없이 표시된 이미지에서 그 값의 결과를 사용 : 나는 그런 뻔한 일에 대해 뭔가 끔찍한 잘못을하고 있어요 확신

<TextBlock Visibility="Collapsed" Name="bindingFix" Text="{Binding Path=EventType, StringFormat={}/AssemblyName;component/Images/{0}Icon.ico}"/> 
<Image Source="{Binding ElementName=bindingFix, Path=Text}" /> 

이미지와 관련이 있습니다.

감사합니다.

답변

0

잘 모르겠지만 이미지의 소스 속성에 uri가 필요한 문자열을 전달하는 것 같습니다. 따라서 문자열을 uri 객체로 변환해야합니다.

6

StringFormat은 대상 속성이 실제로 문자열 인 경우에만 사용됩니다. Image.Source 속성은 Uri이므로 바인딩 엔진은 StringFormat을 적용하지 않습니다.

하나의 대안은 Value Converter을 사용하는 것입니다. ConverterParameter에서 문자열 형식을 사용하는 일반 StringFormatConverter 또는보다 구체적인 ImageSourceConverter를 작성하십시오. 이미지들이 사용되는 것과 동일한 어셈블리에 살고 있다면, 당신은 URI에서 어셈블리 이름과 작동해야 위의 구문을 지정할 필요가 없습니다 것을

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    return string.Format("/Images/{0}Icon.ico", value); 
} 

참고.

관련 문제