我想找出加載控件時第一次選擇TextBox中所有文本的最佳方法。我使用MVVM模式,因此我將TextBox的Text屬性的雙向綁定用於ViewModel上的字符串。我正在使用這個TextBox「重命名」已有名稱的東西,所以我想在控件加載時選擇舊名稱,以便輕鬆刪除和重命名。初始文本(舊名稱)通過將其設置在ViewModel中進行填充,然後在數據綁定完成後反映到TextBox中。在Silverlight TextBox中選擇初始文本
什麼,我會真的喜歡做的事情是這樣的:
<TextBox x:Name="NameTextBox" Text="{Binding NameViewModelProperty, Mode=TwoWay}" SelectedText="{Binding NameViewModelProperty, Mode=OneTime}" />
基本上只是使用整個文本與一次性綁定SelectedText。但是,這是行不通的,因爲SelectedText不是DependencyProperty。
我並不完全反對在我的視圖的代碼隱藏中添加選擇代碼,但是在這種情況下,我的問題是確定初始文本綁定何時完成。 TextBox始終爲空,所以無法在構造函數中完成。 TextChanged事件只在用戶輸入新文本時觸發,而不是在ViewModel的初始綁定中更改文本時觸發。
任何想法,非常感謝!
我不認爲子類化真的需要這個,但在TextBox的GotFocus事件上調用SelectAll()確實實現了我想要的數據綁定文本。我沒有看到它是一個子類的真正原因,我只是在我的代碼後面做了這個,如果我想要更多的MVVMish,它可以很容易地重構爲Blend行爲。謝謝! – 2010-03-18 16:02:23