0

我有两个绑定到同一个属性的文本框。一个文本框用于原始文本,第二个文本框用于新文本。我遇到的问题是,当第一个文本框的文本被提交时,它会返回原始文本。但是当我输入第二个文本框来更新名称时,这会自动覆盖第一个文本框文本中的内容。我只是想知道是否有办法阻止它,所以我将显示原始文本和新文本。

    <TextBox Name="txtOriginalName" 
             HorizontalAlignment="Right" VerticalAlignment="Top" 
             Width="524" Height="auto" TextWrapping="Wrap"  
             AcceptsReturn="True" HorizontalScrollBarVisibility="Auto" 
             Text="{Binding Path=Person.Name}"/>

   <TextBox Name="txtNewName" 
            HorizontalAlignment="Right" VerticalAlignment="Top" 
            Width="524" Height="auto" TextWrapping="Wrap" AcceptsReturn="True" 
            HorizontalScrollBarVisibility="Auto" 
            Text="{Binding Path=Person.Name}"/>
4

2 回答 2

1

尝试Text="{Binding Path=Person.Name, Mode=OneTime}"txtOriginalName,然后txtOriginalName将被初始化为Person.Name中的值,但稍后Person.Name更改时不会更新。

这是一个有用的装订备忘单

于 2012-05-08T17:47:47.943 回答
1

理想情况下,您有一个 PersonViewModel,它具有单独的 OriginalName 和 NewName 属性,并带有一些触发条件来确定基础 Person.Name 何时更新。如果某些名称条目无效,这还允许您放置 UI 级别的验证逻辑(带有关联的反馈)。您实质上是将更新名称的过程(使用新/原始名称的概念)与包含名称的过程分离。前者可以处于名称正在变化的状态,而后者只是有一个名称。

于 2012-05-08T18:58:47.460 回答