我是wpf新手,遇到这种情况。假设我有一个 Customer
模型,其中包含 FirstName
、LastName
、Telephone
等。如果需要编辑现有客户的详细信息,则会打开 CustomerEdit
View 模型,其中它具有 Customer
类型的属性。该 View 有一些文本框绑定(bind)到 CurrentCustomer.FirstName
、 CurrentCustomer.LastName
等等。现在,每当用户在这些文本框中提供输入时, bounded 属性就会更新。有一个按钮用于保存所做的更改。是否可以通过某种方式仅在按下保存按钮时更新源属性,如果可能,以 MVVM 方式更新源属性?
最佳答案
默认情况下,Text
DP 的 UpdateSourceTrigger
值为 LostFocus
。将其更改为 Explicit
并从保存按钮单击通过获取绑定(bind)表达式手动更新源并对其调用 UpdateSource()
。
XAML:
<TextBox x:Name="myTextBox"
Text="{Binding PropertyName, UpdateSourceTrigger=Explicit}"/>
<Button Click="btnSave_Click"/>
代码隐藏:
private void btnSave_Click(object sender, RoutedEventArgs e)
{
myTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
在代码隐藏中使用此逻辑并不违反任何 MVVM 规则,但如果您不希望它在代码隐藏中,则仍然如此。你可以这样实现:
在您的 View 模型中创建一个 ICommand
并绑定(bind)到按钮命令,并在命令参数中传递 textBox 的文本值。您可以根据需要使用 RelayCommand
或 DelegateCommand
。对于 DelegateCommand,请参阅此 here .
<TextBox x:Name="myTextBox"
Text="{Binding PropertyName, UpdateSourceTrigger=Explicit}"/>
<Button Command="{Binding SaveCommand}"
CommandParameter="{Binding Text, ElementName=myTextBox}"/>
并在 ViewModel 命令方法中设置与文本框文本绑定(bind)的实际值。
private void SaveMethod(object parameter)
{
this.PropertyName = parameter.ToString();
}
关于c# - WPF MVVM 仅在用户确认后更新源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521569/