Button 有一个类型为 ICommand 的 DependencyProperty,称为 CommandProperty,如果设置了该属性,则会在单击 Button 时调用该命令。
通常在 MVVM 中,公开ICommand 类型的属性(您需要创建一个实现或从框架中获取一个)并在 XAML 中绑定到它,如下所示:
<Button Content="My Button"
Command="{Binding MyCommand}" />
视图模型:
public class MyViewModel : INotifyPropertyChanged
{
public ICommand MyCommand
{
get { … }
}
…
}
现在您不再需要代码隐藏了。
至于获取要保存的文本,您还是希望将数据绑定到视图模型而不是代码隐藏。
不要读取TextBox.Text,而是将该属性绑定到您的视图模型。
视图模型:
public class MyViewModel : INotifyPropertyChanged
{
…
private string _myText;
public string MyText
{
get { return _myText; }
set
{
_myText = value;
// raise property change notification
}
}
xaml:
<TextBox Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
请注意,我们使用的是TwoWay 绑定模式。这样,viewmodel 中的更改可以反映在 TextBox 中(这就是您需要实现 INotifyPropertyChanged 的原因),TextBox 中的更改将传播到 view-model。
我还添加了UpdateSourceTrigger 设置,因为默认情况下,视图模型只会在TextBox 失去焦点时更新。这样,只要值更改,视图模型就会更新。在你的应用程序中使用任何有意义的东西。