我想找出加载控件时第一次选择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