我从TextBox-KeyUp事件在我的ViewModel上执行命令。我遇到的问题是TextBox中绑定到ViewModel上的属性的文本在执行命令时仍然为null。
视图模型:
private string _myText;
public string MyText
{
get { return _myText; }
set
{
_myText = value;
RaisePropertyChanged("MyText");
}
}
// ... ICommand stuff here
private object HandleMyCommand(object param)
{
Console.WriteLine(MyText); // at this point MyText --> 'old' value, e.g. null
return null;
}}
XAML:
<StackPannel>
<TextBox x:Name="tbTest" KeyUp="TextBox_KeyUp" Text="{Binding MyText, Mode=TwoWay}" />
<Button x:Name="btnTest" Content="Click" Command="{Binding MyCommand}" />
</StackPannel>
代码背后:
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
if (btnTest.Command.CanExecute(null))
{
btnTest.Command.Execute(null);
}
}
}
绑定和命令都有效。以正常方式执行命令时,使用该按钮可以很好地设置属性。
我没有正确地这样做吗?
答案 0 :(得分:2)
默认设置UpdateSourceTrigger=PropertyChanged
MyText
将在失去焦点时更新:
Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
此外,与您的问题无关,但您可以为InputBinding
创建TextBox
,以便在按下 Enter 时执行某些Command
:
<TextBox x:Name="tbTest" Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding MyCommand}"/>
</TextBox.InputBindings>
</TextBox>
答案 1 :(得分:0)
尝试将text属性的绑定更改为:
Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"