在文本输入后取消WPF中的绑定更新

时间:2015-04-30 13:52:35

标签: c# wpf

我有一个包含多个文本框输入的窗口。当我单击编辑时,它会在当前用户中加载,如果我进行更改,则决定取消它并不取消取消时的更改。

如果我再次尝试编辑同一个人,我之前所做的更改仍然在输入字段中。

这就是我调用编辑窗口的方式

<Button x:Uid="Button_EditCommand" Margin="0,0,2,0" Command="{Binding Path=EditProviderCommand}" Style="{StaticResource btnCustom}" MinWidth="75" Content="Save" Visibility="{Binding Path=IsEditing, Converter={StaticResource VisibilityConverter}}" />

然后调用该框,这是我的取消方法

CancelCommand = new RelayCommand(Cancel);
public ICommand CancelCommand { get; private set; }

private void Cancel()
  {
     Provider = null;
     OnRequestClose();
  }

取消方法与Add方法共享。当我输入添加并单击取消时,它会清除所有更改。如何清除已编辑的字段而不是将它们绑定到绑定?

文本框:

<TextBox x:Uid="TextBox_1" Grid.Column="1" Grid.Row="0" Tag="{Binding Path=FirstNameLabel, Source={StaticResource Clientization}}" Style="{StaticResource EditTextBox}" MaxLength="35"
                 Text="{Binding Path=Provider.FirstName, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Uid="TextBox_2" Grid.Column="2" Grid.Row="0" Tag="Middle" MinWidth="75" Style="{StaticResource EditTextBox}" MaxLength="30"
                 Text="{Binding Path=Provider.MiddleName, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Uid="TextBox_3" Grid.Column="1" Grid.Row="1" Tag="{Binding Path=LastNameLabel, Source={StaticResource Clientization}}" Style="{StaticResource EditTextBox}" MaxLength="60"
                 Text="{Binding Path=Provider.LastName, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Uid="TextBox_4" Grid.Column="2" Grid.Row="1" Tag="Suffix" Style="{StaticResource EditTextBox}" MaxLength="20"
                 Text="{Binding Path=Provider.Suffix, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Uid="TextBox_5" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" Tag="List Name*" Style="{StaticResource EditTextBox}" MaxLength="160"
                 Text="{Binding Path=Provider.ListName, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Uid="TextBox_6" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="3" Tag="NPI*" Style="{StaticResource EditTextBox}" MaxLength="80"
                 Visibility="{Binding Path=HideNpi, Source={StaticResource Clientization}, Converter={StaticResource TernaryConverter}, ConverterParameter='True ? Collapsed : Visible'}"
                 Text="{Binding Path=Provider.NPI, UpdateSourceTrigger=PropertyChanged}"/>

更新

我的提供商副本

public AddEditProviderDialogViewModel(IProviderRepository providerRepository, IMedListProvider medListProvider,
     Provider provider, bool isEditing)
     : this(providerRepository, medListProvider, provider)
  {
     _isEditing = isEditing;
     Provider editProvider = new Provider()
     {
        FirstName = provider.FirstName,
        LastName = provider.LastName,
        Prefix = provider.Prefix,
        Suffix = provider.Suffix,
        ListName = provider.ListName,
        NPI = provider.NPI,
        OrgName = provider.OrgName,
        Address1 = provider.Address1,
        Address2 = provider.Address2,
        City = provider.City,
        State = provider.State,
        Zip = provider.Zip,
        EmailAddress = provider.EmailAddress,
        Phone1Type = provider.Phone1Type,
        Phone2Type = provider.Phone2Type,
        Phone1 = provider.Phone1,
        Phone2 = provider.Phone2            
     };

2 个答案:

答案 0 :(得分:1)

大概有Add,你只对编辑过的模型做任何事情,下次你创建一个新模型。我无法看到任何事情会被清除 - 只是没有添加。

Cancel无法撤消任何更改,您必须自己处理。也许复制当前项目并编辑它。接受后,您必须将更改复制回原始版本。

如果您需要任何特定帮助,我们需要查看更多代码。也许是一个简单的例子。

答案 1 :(得分:0)

我这样做的方法是:创建一个对象的副本。然后创建一个撤消方法并将其绑定到取消。 undo方法可以这样做:editedobject = originalobject。我回家时发布了错误的邮政编码。