2013-07-24 4 views
-3

확인.WPF - 다른 텍스트 상자 값에 따라 텍스트 상자 값을 변경하십시오.

나는 PersonId, Name 및 Age와 같은 속성을 가진 'Person'클래스가 있습니다. 지금까지 3 명의 사람들을 추가하고 목록에서 DataContext를 설정했습니다. 내 유효성 검사 규칙이 정상적으로 작동하고 있습니다.

내가 알고 싶은 것은 첫 번째 TextBox에 두 번째 사람의 이름을 입력 할 때이 사람의 Age를 표시하는 두 번째 TextBox가 필요하다는 것입니다.

  • 폴, 30 살
  • 28 세

  • 조지, 마자

    • 요한 25 세 : 예를 들어

      ,의 내가이 DataContext에 있다고 가정 해 봅시다 'Paul'을 입력하면 두 번째 TextBox의 값이 '30'으로 변경됩니다. 'John'을 입력하면 두 번째 TextBox가 '25'로 변경되어야합니다. 사전에

      감사합니다, 티아구

  • 답변

    1

    기본적인 아이디어는 사람 속성을 통해 이름과 나이를 연결하는 것입니다. Name의 setter에서 결과가 null이 아닌 경우 이름을 기반으로 사람을 검색 한 다음 Person에 할당합니다. Person의 설정자에서 Age를 설정하고 UI에 알립니다. 코드가 같다 : 위의 코드에서

    private Person _selectedPerson; 
    
        public Person SelectedPerson 
        { 
         get { return _selectedPerson; } 
         set 
         { 
          if (value == null) 
           return; 
          _selectedPerson = value; 
          PersonAge = _selectedPerson.Age; 
          OnPropertyChanged("Person"); 
         } 
        } 
    
        private string _personName; 
    
        public string PersonName 
        { 
         get { return _personName; } 
         set 
         { 
          _personName = value; 
          var person = Persons.FirstOrDefault(item => item.Name == _personName); 
          if (person != null) 
           SelectedPerson = person; 
          OnPropertyChanged("PersonName"); 
         } 
        } 
    
    
        private int _personAge; 
    
        public int PersonAge 
        { 
         get { return _personAge; } 
         set 
         { 
          _personAge = value; 
          OnPropertyChanged("PersonAge"); 
         } 
        } 
    

    , 사람은 당신이 목록 상자에 바인딩 목록입니다,으로 PersonName이 이름의 텍스트 상자에 바인딩, 인물이 시대의 텍스트 상자에 바인딩됩니다. 텍스트 상자 대신 텍스트 상자를 사용하기 때문에 여기 PersonAge를 쓰기 가능하게 유지합니다.

    희망이 있습니다.

    +0

    이 작은 예제에서는 3 층 아키텍처를 사용하고 있습니다 : 클래스 계층, 비즈니스 로직 계층 및 데이터 액세스 계층. 'var person = Persons.FirstOrDefault (item => item.Name == _personName);'을 사용하려고 할 때마다 암시 적으로 하나의 레이어를 다른 레이어로 변환하지 않는다는 오류가 표시됩니다. – Tico

    +0

    코드가 없으므로 Person 유형과 UI에 바인딩 할 유형을 잘 모릅니다. 아마도 당신은 DataModel과 Dto 모두에 Person 객체를 가지고있을 것이고, 하나의 티어로 그것들을 섞을 것이다. –

    +0

    여기 내 Person.cs는 다음과 같습니다. [Pastebin - Person.cs] (http://pastebin.com/xAQKKbvj) – Tico

    관련 문제