我有一个非常大的wpf应用程序,它是使用prism框架和MVVM概念构建的,如果用户在文本框中键入更改并按下接受按钮而不先离开文本框,则会导致按钮操作无法接收更改文本框中的值。我的viewmodel有以下按钮代码
private DelegateCommand<string> _myButtonAction;
public ICommand MyButtonAction
{
get
{
if (_myButtonAction== null)
{
_myButtonAction= DelegateCommand<string>.FromAsyncHandler(
MyFunction,
s => true);
}
return _myButtonAction;
}
}
private Task MyFunction(string arg)
{
// this event calls a button.focus in the view
EventAggregator.GetEvent<FocusObject>().Publish("");
// this doesn't work either
Keyboard.ClearFocus();
using (new WaitCursor("my function"))
{
// do some stuff
}
return Task.FromResult<object>(null);
}
尽管尝试使用Keyboard.ClearFocus()并使用消息事件来调用MyButton.Focus();在视图中,一旦我使用此方法,似乎没有任何东西似乎触发文本框失去焦点。有没有其他人对如何从视图模型强制更新一堆文本框(比方说100+)有任何建议?
答案 0 :(得分:1)
不会告知TextBox的数据来源更新。
我发现您担心使用UpdateSourceTrigger=PropertyChanged
作为验证原因。但是,我相信这仍是一个很好的解决方案。为了防止TextBoxes在每次击键时强制进行验证,您可以在绑定中添加Delay。
例如:
<TextBlock Text="{Binding someProperty, UpdateSourceTrigger=PropertyChanged, Delay=100}" />