2013-08-09 2 views
7

wpf 텍스트 상자를 viewmodel에있는 사전에 바인딩하려고합니다. viewmodel은 뷰의 datacontext로 사용됩니다. 많은 예제를 발견했지만 간단하게 들리지만 저에게는 효과가 없습니다.WPF 텍스트 입력란을 사전 항목에 바인딩

보기 :

텍스트 상자 X : 이름 = "txbTest"위해 Grid.Row = "10"Grid.Column을이 = "2"텍스트 = "{바인딩 MyDict [첫째]}"

의 ViewModel :

public Dictionary<string, string> MyDict = new Dictionary<string, string> 
     { 
      {"First", "Test1"}, 
      {"Second", "Test2"} 
     }; 

나는 내가

Text="{Binding MyDict[First]}" 
Text="{Binding Path=MyDict[First]}" 
Text="{Binding MyDict[First].Text}" 
Text="{Binding MyDict[First].Value}" 
모든 변종 발견하려고

하지만 아무 것도 작동하지 않습니다. 텍스트 상자가 비어 있습니다. 어떤 생각?

+0

필드에 바인딩 할 수 없습니다. MyDict를 속성으로 정의하십시오. 내 대답에 샘플 코드를 공유했습니다. –

+1

분명히, 너무 쉬울 수 있습니다. 고마워, 작동 해. 몇 가지 예를 들자면 나는 실패했다. – user2377283

답변

18

MyDict은 속성이 아니기 때문에 코드에 바인딩 오류가 있습니다. 당신이 아니라 당신의 ViewModel 초기화 MyDict의 생성자에서

private Dictionary<string, string> _MyDict; 

    public Dictionary<string, string> MyDict 
    { 
     get { return _MyDict; } 
     set { _MyDict = value; } 
    } 

아래 그림과 같은 PropertyField

System.Windows.Data Error: 40 : BindingExpression path error: 'MyDict' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=MyDict[First]; DataItem='MainWindow' (Name=''); target element is 'TextBox' (Name='textBox1'); target property is 'Text' (type 'String') 

변경 MyDict FieldProperty에 결합해야합니다. MyDict는 [ "키"]는 Text 또는 Value 재산이없는 stringstring를 반환으로

 MyDict = new Dictionary<string, string> 
     { 
      {"First", "Test1"}, 
      {"Second", "Test2"} 
     }; 

다음의 두 가지 변종이 작동하지 않습니다. 다른 두 가지 변형이 작동해야합니다.

Text="{Binding MyDict[First].Text}" 
Text="{Binding MyDict[First].Value}" 
+1

분명히, 너무 쉬울 수 있습니다. 고마워, 작동 해. 몇 가지 예를 들자면 나는 실패했다. – user2377283

+0

환영합니다 !. 도움이된다면 대답을 수락하십시오. –

+0

프로그래밍 방식으로 어떻게하면됩니까? 텍스트 상자와 사전을 동적으로 작성한다고 가정 해보십시오. – estebro

관련 문제