2011-10-02 2 views
0

3 개의 텍스트 상자가있는 wpf 응용 프로그램이 있습니다.wpf에서 속성 및 제어 업데이트를 수행하는 방법은 무엇입니까?

txb1 텍스트

를 삽입하기위한

txb2 디스플레이 삽입 파싱 된 텍스트의 특정 값이 그 것이다 INT 번호

txb3 클래스 저장 데이터가 일정 값

의해 multiplyed TXB2의 값을 표시한다 . I는 Data 새로운 인스턴스를 생성 이벤트를 처리 생성자를 통해 txb1.Text 통과 Number에 값을 설정 Data 클래스 내부 분석 함수를 호출하는 형태로 버튼을 눌러

class Data 
{ 
    private conts int Mul = 10; 
    public string Text {get; set;} 
    public int Number {get; set;} 
    private int MultiNumber 
    { 
     get 
     { 
      Number * Mul; 
     } 
    } 

    public string MultiNumberFormated 
    { 
     get 
     { 
      string.Format("{some format}", MultiNumber); 
     } 
    } 
} 

. 텍스트 상자는 Text="{Binding SomeProperty}"으로 정의되고 텍스트 상자가있는 컨테이너의 DataContextData 인스턴스에 설정되므로 버튼 클릭 값이 해당 상자에 표시됩니다. 이제

, 나는 해결책이txb3갱신txb2에서이 입니다 값이 변경를 확인해야합니다.

이것은 복잡한 응용 프로그램의 작은 예이며, 더 많은 연결된 텍스트 상자가 있습니다. 예를 들어 txb4 디스플레이는 곱셈 MultiNumber을 표시하므로 단추 이벤트를 사용하여 winforms 솔루션을 업데이트하지 마십시오. 그런 방법이 있습니까? 나는 또한이 특정 응용 프로그램에 앉아 코드 샘플을 주셔서 감사하겠습니다.

+0

이 질문에 대한 답변으로 게시 된 스크린 샷과 코드가 포함 된 자습서가 있습니다. http://stackoverflow.com/questions/7592013/trying-to-understand-of-dependencyproperty/7599716#7599716 - 여기에는 'INotifyPropertyChanged 구현 응답이 당신을 가리키고 있습니다. –

답변

1

당신은 여기에 몇 가지 옵션이있다.SLaks 말했듯이 당신은 당신의 데이터 객체에서 INotifyPropertyChanged를 구현해야합니다 - tutorials 많은가에있다 - 당신은 하나

  • 는 곱한 수에 대한 데이터 클래스에 새로운 속성을 확인하고
  • 에 txb3 바인딩 할 수 있습니다 이 디스플레이를 될 것 경우
  • Implement a value converter는 당신을 위해 곱셈을 처리하는 경우에만

나는 또한 멀리 버튼 처리기에서 텍스트 상자에서 값을 전달하는 현재의 방식에서 얻을 것입니다.

아마 특성에 Data의 인스턴스에 (당신의 진입 점을 계산에 현재 아무것도에 바인딩되지 않는 이유는 무엇입니까? txb1 포함) txb2에 대한 값 계산기로 MultiNumberFormatted 기능을 이동하고 모든 데이터 바인딩보고 싶은데

라이프 사이클에 훨씬 더 빨리 생성 - 두 페이지로 구성이나 전달에

를 또는, MultiNumberFormatted에게 데이터의 속성을 확인하고 초기 번호 세터에서 명시 적으로 설정할 수 있습니다 :

int InputNumber 
{ 
    get 
    { 
     _return _inputNumber; 
    } 
    set 
    { 
     _inputNumber = value; 
     MultiNumberFormatted=String.Format("whatever: {0}", InputNumber); 
     NotifyPropertyChanged("InputNumber"); 
    } 
} 

string MultiNumberFormatted 
{ 
    get 
    { 
     return _multiNumber; 
    } 
    set 
    { 
     _multiNumber=value; 
     NotifyPropertyChanged("MultiNumberFormatted"); 
    } 
} 

입니다. 그것을하는 한 가지 방법 , 다른 것들이 있습니다. 요점은 모든 것을 적절한 속성에 바인딩하고 WPF 바인딩 인프라가 그 일을 할 수있게하면 모든 것이 '생방송'이고 모든 것이 "잘 작동합니다".

1

모델에 INotifyPropertyChanged을 구현하고 모든 종속 속성 설정자에서 PropertyChanged 이벤트를 발생시켜야합니다.

+0

당신은 멋지게 썼지 만 코드를 작성하는 방법을 상상할 수는 없습니다. –

2

Slaks에 따르면, ViewModel에 INotifyPropertyChanged을 구현해야합니다.
MVVM 패턴은 V (View) 및 VM (ViewModel)을 중심으로 설명합니다.

은 당신이에 자신을 문서화 한 후에는 다음 예 here

을 찾을 수 있습니다

, 당신은 실제로 사용자의 입력을 수행해야하는 텍스트 상자의 바인딩에 Mode=TwoWay를 사용하고 싶습니다.

그런 다음 다른 텍스트 상자 (각 매개 변수를 사용하는 사용자)를 채우는 문자열 속성의 getter에서 계산을 수행하는 논리를 구현합니다.
그들의 세터에서는 PropertyChanged 이벤트를 발생시켜야합니다.

WPF가이 인터페이스와 MVVM 패턴과 밀접하게 결합되어 있다는 것을 빨리 깨닫게 될 것입니다. 당신이 모든 것을 한 번

지금, 나는 여전히 대답이있을거야 더 구체적인 질문 ;-)

+0

일반 공용 인터페이스 (심지어 그곳에는 이름 만)와 마찬가지로보기 모델의 코드와 밀접하게 결합되어 있지 않습니다. 일반 OOP에서 얻을 수있는 것처럼 결합이 느슨합니다. MVVM 패턴에 크게 의존합니다. –

+0

OOP 에서처럼 단단히 결합 된 것은 아닙니다. –

+0

내가 할 수있을 때 나는 현저하지 않게하려고 노력한다. 그러나 "단단히 결합 된 (tightly coupled)"은 현재로드 된 용어이며 유지 보수 및 리팩토링을 어렵다는 부정적인 의미가 있습니다. MVVM은보기 모델을 추상화해야하는 대신 유지 관리 및 단위 테스트를 더 쉽게하기 때문에 "강력하게 관련성이 높습니다"라는 말이 더 적합 할 것입니다. 하지만 예, 뷰 모델의 공개 인터페이스는보기를 깨지 않고 변경할 수 없으며 그 의미에서 몇 가지 결합이 있습니다. 아직 Winforms보다 느슨합니다.보기와 구현이 함께 설명됩니다. –

관련 문제