【发布时间】:2013-09-05 21:52:25
【问题描述】:
我有一个简单的 Silverlight TextBox,它通过条形码扫描仪接收文本。它基本上像粘贴一样起作用。无论如何,我希望我的 TextBox 在发现其内容发生变化时,在我的 ViewModel 中运行 LoadScannedResults()。默认情况下,当我执行双向绑定时,我的 ViewModel 中的 ScanDocumentNumber 会在我点击离开页面时触发。如果我在我的代码隐藏中输入tbDocumentNumber_TextChanged(),我可以获得所需的效果,但随后我点击了我的 ViewModel 两次——一次在 TextChanged 上,然后在我点击离开页面时再次点击。我希望它只发生在 TextChanged 上。感谢您的帮助!
这是我的 Home.xaml
<TextBox Name="tbDocumentNumber" Margin="3" VerticalAlignment="Center" Text="{Binding ScanDocumentNumber, Mode=TwoWay}" Width="150" />
这是我的 Home.xaml.cs
public Home()
{
m_DataContext = HomeViewModel.Current;
this.DataContext = m_DataContext;
InitializeComponent();
tbDocumentNumber.TextChanged += new TextChangedEventHandler(tbDocumentNumber_TextChanged);
}
private void tbDocumentNumber_TextChanged(object sender, TextChangedEventArgs e)
{
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && focusObj is TextBox)
{
var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
binding.UpdateSource();
tbDocumentNumber.SelectAll();
}
}
这是我的 HomeViewModel.cs
private string m_ScanDocumentNumber;
public string ScanDocumentNumber
{
get { return m_ScanDocumentNumber; }
set
{
if (m_ScanDocumentNumber == null || !m_ScanDocumentNumber.Equals(value))
{
m_ScanDocumentNumber = value.Trim();
RaisePropertyChanged("ScanDocumentNumber");
}
if (m_ScanDocumentNumber != null && m_ScanDocumentNumber != "")
{
LoadScannedResults();
}
}
}
【问题讨论】:
标签: silverlight