c# - WPF MVVM 仅在用户确认后更新源属性

标签 c# wpf mvvm binding

我是wpf新手,遇到这种情况。假设我有一个 Customer 模型,其中包含 FirstNameLastNameTelephone 等。如果需要编辑现有客户的详细信息,则会打开 CustomerEdit View 模型,其中它具有 Customer 类型的属性。该 View 有一些文本框绑定(bind)到 CurrentCustomer.FirstNameCurrentCustomer.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 的文本值。您可以根据需要使用 RelayCommandDelegateCommand。对于 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/

相关文章:

c# - 从另一台计算机发送 MSMQ 消息

wpf - 以编程方式将 Datagrid 列置于 View 中(水平滚动)

WPF 窗口对象在 Windows 10 中的第二个屏幕上变黑

WPF MVVM 路由事件

javascript - ComputedObservables 在 ko.mapping.fromJS 之后不会重新计算

c# - 将项目添加到 Visual Studio 解决方案时出现的问题

C# NET - 在不透明级别设置的窗体上绘制不透明画笔

c# - MVVM模型——模型之间的关联

c# - 如何实现 IAsyncOperationWithProgress

.net - 椭圆绘图 WPF 动画