2011-11-02 4 views
2

textbox.textchanged 이벤트에 문제가 있습니다. 내 텍스트 상자는 데이터 바인딩되어 있으며 페이지가로드되면 텍스트 변경 이벤트가 트리거됩니다. 어떻게 발생하지 않도록하고 사용자가 어떤 종류의 변경 작업을 수행 할 때만 트리거합니까?Textbox.TextChanged 페이지가로드 될 때 트리거됩니다. 어떻게 방지합니까?

+0

이 초기 이벤트 호출이 왜 처음부터 문제가되는지 물어볼 수 있습니까? 어쩌면 우리는 문제의 배경에있는 문제를 해결할 수 있습니다. – Amenti

+0

안녕 Amenti. 저장 및 취소 버튼이있는 탐색 페이지가 있습니다. 처음에는 두 개의 기본값으로 채워진 여러 개의 텍스트 상자가있는 페이지가로드됩니다. 저장 버튼과 취소 버튼을 누르기 전에 사용자가 해당 페이지를 탐색 할 수있는 기능을 제한해야합니다. – will0809

+0

취소 버튼을 다음과 같이 시뮬레이션 할 수 있습니다. someButton.RaiseEvent (new RoutedEventArgs (Button.ClickEvent)); 하지만 작동하지 않았습니다. 나는 InitializeComponent() 다음에 이것을 넣는다. 내가 잘못하고 있니? – will0809

답변

8

내부의 TextChanged 이벤트 핸들러 :

if (this.IsLoaded) 
{ 
    //your logic here 
} 

당신의 TextChanged 이벤트의 첫 번째 발사를 건너 뛸 수 있습니다 이러한 방법으로, 윈도우는 아직로드되지 않은 경우.

+0

안녕하세요 icebat. 나는 이것을 시도했지만, 모든 것이 초기화되고로드 된 후에 히트 한 첫 번째 것은 textchanged 이벤트이다. 어쨌든 해고당했습니다. – will0809

+0

처음 값을 확인하고 변경하면 기본값을 가질 수 없습니까? – MaRuf

+0

@ will0809, 그건 이상합니다. 어떻게 기본값을 설정합니까? thet 데이터 바인딩 또는 코드에서 설정되어 있습니까? – icebat

1

음, 사용자가 사용자가 명시 적으로 양식을 저장하거나 닫을 때 기본 데이터로만 변경 내용을 적용하기를 원한다는 의견을 수집합니다.

UpdateSourceTrigger "Explicit"을 여기에서 사용할 수 있습니다.

<TextBox Text={Binding MyData, UpdateSourceTrigger=Explicit}/> 

그래서 변경 사항은 사용자가 저장 버튼을 칠 때 명시 적으로 바인딩에 UpdateSource를 호출하여 전파됩니다.

MVVM을 사용하는 경우 동일한 논리를 ViewModels에 코드 방식으로 구현할 수도 있습니다. 창 (또는 UserControl을, 또는 무엇이든)가로드되는 경우 확인할 수 있습니다

2

텍스트가 설정 될 때마다 TextChanged가 트리거되는 것이 문제입니다. WPF가 작동하는 방식입니다. Window/Usercontrol의 Loaded 이벤트에 가입하여 코드 비헤이비어에서 이벤트를 설정함으로써이를 "수정할"수 있습니다. 로드 된 이벤트는 모든 하위 및 하위 항목의로드가 완료되고 표시 될 준비가 된 후에 실행됩니다.

<UserControl ---- Loaded="UserControl_Loaded">  
- 
public void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    _txtBox.TextChanged += txt_changed; 
} 

public void txt_changed(object sender, RoutedEventArgs e) 
{ 
    (...) 
} 
+0

나는 이것이 작동하지 않는 이유는 내 textboxes databound이며, 내 default 값은 그들이 textchanged 이벤트가 발생하게로드를 마친 후 텍스트 상자에로드됩니다 생각합니다. – will0809

0

나는 동일한 문제가있어서 해결 방법이있다.

창에로드 된 변수를 추가하고이를 Window_Loaded 이벤트의 끝에서 true로 설정했습니다.

TextChanged 이벤트에서 변수가 true인지 확인하십시오.

관련 문제