2014-04-27 3 views
1

정적 클래스에있는 정적 사전에 ComboBox의 ItemsSource를 바인딩하려고합니다. 내가 잘 작동 것 다음을 사용 WPF에서Bind Combobox Itemsource to Static Dictionary (Silverlight)

: LocaleHelper 클래스 이름이고 FriendlyNames 내가 바인딩하고자하는의 사전 속성입니다

ItemSource="{x:Static objectModel:LocaleHelper.FriendlyNames}" 

.
그러나 Silverlight에서 x:Static 유형을 찾지 못했습니다.
누구든지 내게이 문제와 해결 방법을 설명 할 수 있습니까?
둘러 보았지만 자세한 설명을 찾을 수 없습니다.
죄송합니다. 간단한 문제인 경우 - 저는 Silverlight 및 WPF를 처음 사용합니다.

편집 : 실버 라이트는 정적 리소스를 지원하지 않는 것처럼 보입니다. 또한 사전은 속성 변경/지원을 업데이 트하지 않는 것 같습니다 DisplayMemberPath & SelectedValue 그래서 내 viewmodel에서 필드로 사전을 가지고있는 것도 옵션이 아닌 것 같습니다.

답변

3

비 정적 공용 속성 (필드 제외)에만 바인딩 할 수 있습니다. 하지만 은 이러한 속성에 대해 "이동 통신사"를 사용하므로 ViewModel에서 이러한 속성을 사용하지 않아도됩니다. ...의 볼

<Resources> 
    <LocaleHelperWrapper x:Key="Wrapper"/> 
</Resources> 

<ComboBox ItemsSource="{Binding Path=FriendlyNames, 
           Source={StaticResource Wrapper}}"/> 

그리고 래퍼 코드를 보자

public class LocaleHelperWrapper 
{ 
    public Dictionary<string, string> FriendlyNames 
    { 
     get { return LocaleHelper.FriendlyNames; } 
    } 
} 

[편집]을 ComboBoxDisplayMemberPathSelectedValue 지원합니다.

<ComboBox 
    DisplayMemberPath="Value" 
    SelectedValuePath="Key" 
    SelectedValue="{Binding Path=MySelectionViewModel.SelectedKey, Mode=TwoWay}" 
    ItemsSource="..."/> 
+0

자리에, 감사합니다 : 당신이 Key을 선택하는 콤보를 사용하고의 Value 사전의 KeyValuePairs을 표시 할 가정. – CreativeAbyss

0

단순히 컬렉션에 바인딩하는 문제인 경우 ViewModel의 생성자에서이를 수행 할 수도 있습니다. 시간이 지남에 따라 정적 콜렉션이 변경되는 경우 ObservableCollection 사용을 고려하십시오.