2010-07-20 5 views
0

나는 wpf - mvvm 모델에서 일하고있다.속성이 변경된 이벤트의 값을 속성에 할당 할 수 있습니까?

저는 "marketName"이라는 텍스트 상자가 있습니다. xaml에서 "newmarketname"(내 viewmodel에 정의 된) 속성을이 텍스트 상자에 바인딩합니다. 일단 사용자가 해당 텍스트 상자에 새로운 시장 이름을 입력하면 "newmarketname"의 "set"메소드가 호출됩니다.

"newmarketname"의 set 메소드에서 PropertyChanged 이벤트를 호출합니다.

그리고 속성 변경 처리기는 시장 이름이 이미 있는지 확인하는 기능을 호출합니다. "예"인 경우 string.Empty를 속성 "newmarketname"에 할당합니다. 그래서 "newmarketname"의 set 메소드가 다시 호출되어 PropertyChanged 이벤트가 호출됩니다.

하지만 문제는 "newmarketname"의 값이 비어 있어도 UI에 반영되지 않는 것입니다.

무엇이 문제입니까?

+0

뒤에 UI 및 코드에서 모두 변경 사항을 반영합니다 –

+0

이 PropertyChanged 이벤트는 INotifyPropertyChanged와 관련이 있습니까? 그렇다면 왜 거기에서 (기존 시장 이름을 확인하기 위해) 함수를 호출하고 있는지, setter 자체에서 해당 검사를 수행 한 다음 변수를 업데이트하고 PropertyChanged 이벤트를 호출하는 것이 좋습니다. – akjoshi

+0

Bcoz ...이 뷰 모델의 모든 속성에 대해 ... 하나의 메서드를 호출하는 중 ... 속성에 따라 무언가를 수행 할 것입니다 ... – Relativity

답변

1

WPF는 값을 설정하는 동안 발생하는 PropertyChanged 이벤트를 무시합니다. 한 가지 해결 방법은 Converter (원시 값을 반환하는 변환기조차도)를 사용하고 UpdateSourceTrigger를 LostFocus로 설정하는 것입니다. 또 다른 방법은 IsAsync를 True로 설정하는 것입니다.

이 문제는 .NET 4.0에서 수정되었습니다. 자세한 내용은이 블로그 항목을 참조하십시오 http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

+0

이 변환기 사용 방법 알려주세요. – Relativity

0

속성 대신 기본 변수를 변경하고 있습니까? 그것이 내가 항상 (실수로)하는 일입니다.

+0

아니요 ... 속성 자체를 변경 중입니다 ... "속성 변경시"이벤트가 호출 중입니다 ... HEre ... 문제는 속성에서 한 속성의 이벤트가 변경됨 ... 다시 변경하는 중 ... UI에서 첫 번째 ... 코드 수준에서 – Relativity

0

은 어쩌면 당신은 양방향으로 바인딩 모드를 설정할 수 있습니다,이 방법 당신은 당신의 코드를 게시 할 경우 도움이 될 것이

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" /> 
관련 문제