有关文本框的问题

时间:2012-05-08 17:37:31

标签: wpf data-binding

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

    <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}"/>

2 个答案:

答案 0 :(得分:1)

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

这是一个有用的绑定cheat sheet

答案 1 :(得分:1)

理想情况下,您有一个具有单独的OriginalName和NewName属性的PersonViewModel,以及一些确定何时更新基础Person.Name的触发条件。如果某些名称条目无效,这还允许您放置UI级验证逻辑(带有相关反馈)。您实际上是在从包含Name的过程中解除更新Name(具有New / Original名称的概念)的过程。前者可以处于名称正在变化的状态,而后者只是名称。