簡體   English   中英

TextBox TextChanged事件問題

[英]TextBox TextChanged Event Problems

我正在使用綁定到對象的基本TextBox。 基本上,我想做的是每次在框中的文本被編輯並且用戶取消選擇框時或在編輯基礎綁定數據時都調用一個方法。 我現在使用的是TextChanged事件,但這有一些問題:

  1. 第一次創建TextBox時會調用它,我不希望這樣。

  2. 每次添加新字符時都會調用它,而我只希望在底層綁定數據發生更改時調用它(這似乎是在焦點從框移開時)。

我該怎么做?

編輯:我嘗試了其他幾個文本框屬性,如Get / LostFocus,但它們似乎從未觸發過。

另外,我也不想將此方法調用放到Property的Setter中,因為底層數據在邏輯上與該項目的UI分離,並且我不希望任何與進行計算相關的方法調用用戶界面。

當焦點從當前元素LostFocus時,將觸發事件LostFocus 我嘗試了它,並且工作正常。

正如jods所說,將TextBox的Text綁定到ViewModel的屬性的最佳方法。 守則是:

視圖:

<TextBox x:Name="TextBox1" Text="{Binding Path=Text1,Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>

視圖模型:

    public string Text1
    {
        get { return _text1; }
        set
        {
            _text1 = value;
            RaisePropertyChanged("Text1");
        }
    }

查看后面的代碼:

    private void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "Text1")
        {
            //Call UI related method...
        }
    }

這樣,它可以滿足您的兩個條件:1.每次編輯TextBox並失去焦點時,將調用Text1的Setter,並且ViewModel將引發PropertyChanged事件。 2.基礎Text1更改時。 Text1也將引發該事件,以便View可以知道它。

它還可以避免您的兩個問題:1.在第一次綁定中,僅調用Text1的getter。 沒有事件發生。 2.僅在TextBox失去焦點后才調用Text1的Setter。

每次編輯框中的文本並且用戶取消選擇該框時

嗯,如果您這樣綁定文本,則這是TextBox的標准行為: Text={Binding Property}

當底層綁定數據被編輯時

您可以在屬性的設置器中提供此功能。

最佳設計是偵聽底層綁定屬性的變化。 如果使用DependencyProperty或對象實現了INotifyPropertyChanged,則可以在不更改設置器的情況下進行操作。

當基礎屬性發生更改時(默認情況下為LostFocus或一次每個字符)是一個綁定選項。

如果您不想聽從我的建議(偵聽模型中的更改),可以訂閱GotFocus和LostFocus事件。 獲取焦點時保存當前值,丟失時與當前值進行比較。 如果不同,請執行您想做的事情。

我不確定您最終要達到的目標,但是我將對此做出猜測。 如果遵循的是MVVM模式,則似乎可以通過使用綁定的updateSourceTrigger屬性來實現所需的功能。 如果您不使用MVVM,則可能要看一下MVVM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM